繁体   English   中英

如何使用 laravel 5.4 通过 jQuery/ajax 创建登录/注销

[英]How to create login/logout via jQuery/ajax using laravel 5.4

我是 Laravel 的新手,我只是通过 jQuery/ajax 创建登录。 根据我的说法,它的工作完美代码如下:

查看:login.blade.php

<script>
    $(document).ready(function(){
        $("#submit").click(function(e){
            e.preventDefault();
            email = $("#email").val();
            password = $("#password").val();
            $.ajax({
                type:"POST",
                data:{"email":email, "password":password, "_token":"{{csrf_token()}}"},
                url:"{{URL::to('login_redirect')}}",
                success:function(data){
                    if (typeof data !== 'object') {
                        data = JSON.parse(data);
                    }
                    if (data.redirect) 
                    {
                        window.location.replace(data.redirect);
                    } 
                    else 
                    {
                        $("#success").html('<p style="color:red;">' + data.error + '</p>');
                    }
                }
            });
        });
    });
</script> 
<div id="success"></div>
<input type="text" name="email" id="email" placeholder="Email">
<input type="password" name="password" id="password" placeholder="Password">
<input type="submit" name="submit" id="submit" class="btn btn-primary">

控制器:Mycontroller.php

<?php
    namespace App\Http\Controllers;
    use Illuminate\Http\Request;
    use App\Http\Controllers\Controller;
    use App\Http\Requests;
    use Auth;
    use Session;
    use DB;

    class Mycontroller extends Controller 
    {   
        public function login_redirect(Request $request)
        {
            $email = $request->input('email');
            $password = $request->input('password');
            $sql = DB::table('user')->where('email', '=', $email)->where('password', '=', $password)->count();
            if($sql > 0)
            {
                $query = DB::table('user')->where('email', '=', $email)->where('password', '=', $password)->get();
                Session::put('user', $query);
                if (!isset($_POST)) 
                {
                    header ("Location: dashboard");
                } 
                else 
                {
                    echo json_encode(array('redirect' => "dashboard"));
                }
            }
            else 
            {
                echo json_encode(array('error' => 'Wrong email or password or may be your account not activated.'));
            }
        }

        public function dashboard()
        {
            $user = Session::get('user');
            return view('user.dashboard',['data'=>$user]);
        }

        public function logout(Request $request) {
            Auth::logout();
            Session::flush();
            return redirect('/login');
        }
    }

视图:dashboard.php

<?php
    if(empty($data))
    {
        header('location:{{url("login")}}');
    }
?>
@if (is_array($data) || is_object($data))
    @foreach($data as $row)
        <h3>Welcome, {{ $row->username }}</h3>
    @endforeach
@endif
<a href="{{url('logout')}}">Logout</a>

现在,问题是当我单击注销按钮时,它会将我重定向到登录页面,这很好,但是当我直接浏览我的 url 上的dashboard页面而没有登录时,它再次访问,这是错误的。 我希望一旦用户注销它就不能直接访问dashboard 那么,我该怎么做呢? 请帮我。

谢谢你

您应该需要在仪表板中检查用户的登录状态。 简单来说,您可以尝试以下答案。 在使用 Laravel 时,为什么不能使用middleware属性?

中间件提供了一种方便的机制来过滤进入应用程序的 HTTP 请求。 例如,Laravel 包含一个中间件,用于验证您的应用程序的用户是否已通过身份验证。 如果用户未通过身份验证,中间件会将用户重定向到登录屏幕。 但是,如果用户通过了身份验证,中间件将允许请求进一步进入应用程序。

public function dashboard()
{
    $user = Session::get('user');
    if($user)
       return view('user.dashboard',['data'=>$user]);
    else
       return redirect('/login');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM