Laravel auth () -> guard () возвращает ноль, используя vue js - PullRequest
6 голосов
/ 07 марта 2019

У меня есть форма входа в vue.js. Мне просто нужно войти в систему с помощью vue.js и laravel. После входа в систему пользователь будет перенаправлен на панель мониторинга, которая уже разработана только с laravel. Я пытаюсь войти в систему, но она не работает, и auth()->guard возвращает null , так что пользователь перенаправляется на страницу входа вместо панели инструментов. Когда я использую почтальон в этом случае, это работает хорошо.

Vue JS

this.$http.post('http://localhost/petamiko/admin/vendors/validate_login',{phone_number : this.phone_number},{
  headers: {
    "Access-Control-Allow-Origin": "*"
  }
})
.then((response) =>{
  if(response.data.status == 'success')
  {
    window.location = "http://localhost/petamiko/admin/vendors/dashboard";
  }
})    

Laravel - подтвердить логин:

public function validate_login(Request $request)
{
    $arr_rules      = array();
    $status         = false;

    $remember_me               = "";
    $arr_rules['phone_number'] = "required";
    $validator = validator::make($request->all(),$arr_rules);
    if($validator->fails()) 
    {
         return response()->json([
                'status' => 'error',
                'msg' => "Mobile number is empty"
         ]);
    }
    $obj_group_vendor  = $this->UsersModel
                         ->where('phone_number',$request->only('phone_number'))
                         ->first();
    if($obj_group_vendor) 
    {
        if($this->auth->attempt(['phone_number' => $request->phone_number,
                                 'role_id'      => 3]))
        {
            return response()->json([
                'status' => 'success',
                'msg' => "You are successfully login to your account."
            ]);
        }
        else
        {
            return response()->json([
                'status' => 'error',
                'msg' => "Invalid login credential."
            ]);
        }
    }
    else
    {
        return response()->json([
            'status' => 'error',
            'msg' => "Invalid login credentials."
        ]);
    }
    return;
}       

Маршрут:

$web_vendor_path = config('app.project.vendor_panel_slug');
Route::group(array('prefix'    => $web_vendor_path,
                   'middleware'=> ['vendor_auth_check']), function ()
{
    $route_slug = 'vendor_';
    Route::post('validate_login', ['as'   => $route_slug.'validate', 
                                   'uses' => $module_controller.'validate_login']);
});

Route::group(array('prefix'    => $web_vendor_path,
                   'middleware'=>'auth_vendor'), function () 
use($web_vendor_path)
{
    $route_slug        = 'vendor_';
    $module_controller = "Vendor\DashboardController@";
    Route::get('/dashboard',['as'   => $route_slug.'index', 
                             'uses' => $module_controller.'index']);
});

Любая помощь будет оценена.

Ответы [ 4 ]

2 голосов
/ 14 марта 2019

Просто выскажу несколько идей здесь:

  • Попробуйте установить заголовок 'Content-Type': 'application/x-www-form-urlencoded' для всех запросов POST.

  • Кроме того,Access-Control-Allow-Origin - это заголовок, который должен быть в ответе веб-сервера.Это не заголовок, который вы должны отправлять в своем запросе от javascript.

2 голосов
/ 15 марта 2019

Убедитесь, что у вас включено веб-связующее ПО в файле маршрута в app / Providers / RouteServiceProvider.php

Затем проверьте app / Http / Kernel.php , что \Illuminate\Session\Middleware\StartSession::class, добавлено и включено в $middlewareGroups['web']

2 голосов
/ 13 марта 2019

При выполнении запроса POST / PATCH / PUT / DELETE из браузера вам необходимо включить токен CSRF вашей страницы.

this.$http.post('http://localhost/petamiko/admin/vendors/validate_login',{phone_number : this.phone_number},{
  headers: {
    "Access-Control-Allow-Origin": "*",
    "X-CSRF-TOKEN": document.head.querySelector('meta[name="csrf-token"]').content
  }
})
.then((response) =>{
  if(response.data.status == 'success')
  {
    window.location = "http://localhost/petamiko/admin/vendors/dashboard";
  }
}) 

И убедитесь, что CSRF включен в качестве метаотметьте на всех своих страницах:

<meta name="csrf-token" content="{{ csrf_token() }}">
0 голосов
/ 19 июля 2019

Если вы используете API-защиту, сделайте это auth()->guard('api').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...