Как создать логин / выход через jQuery / ajax с помощью laravel 5.4 - PullRequest
1 голос
/ 18 июня 2019

Я новичок в 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>

Теперь проблема в том, что когда я нажимаю кнопку выхода из системы, она перенаправляет меня на страницу входа, что нормально, но когда я непосредственно просматриваю страницу dashboard в моем URL без входа, она снова становится доступной, что неправильно. Я хочу, чтобы после выхода из системы пользователь не мог получить прямой доступ к dashboard. Итак, как я могу это сделать? Пожалуйста, помогите мне.

Спасибо

1 Ответ

1 голос
/ 18 июня 2019

Вам необходимо проверить, есть ли у пользователя статус входа в систему на панели инструментов. Просто попробуйте ответ ниже. Что касается использования Laravel, почему вы не можете использовать свойство middleware?

Промежуточное программное обеспечение предоставляет удобный механизм фильтрации HTTP-запросов, поступающих в ваше приложение. Например, Laravel включает промежуточное программное обеспечение, которое проверяет подлинность пользователя вашего приложения. Если пользователь не аутентифицирован, промежуточное программное обеспечение перенаправит пользователя на экран входа в систему. Однако, если пользователь прошел аутентификацию, промежуточное программное обеспечение позволит запросу продолжить работу в приложении.

public function dashboard()
{
    $user = Session::get('user');
    if($user)
       return view('user.dashboard',['data'=>$user]);
    else
       return redirect('/login');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...