首页 > 解决方案 > Laravel auth()->guard() 使用 vue js 返回 null

问题描述

我在 vue.js 中有一个登录表单。我只需要使用 vue.js 和 laravel 登录用户。登录后,用户将重定向到仅使用 laravel 开发的仪表板。我正在尝试登录,但它不起作用并auth()->guard返回null,以便用户重定向到登录页面而不是仪表板。当我在这种情况下使用邮递员时,效果很好。

Vue.js

this.$http.post('http://localhost/project/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/project/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']);
});

任何帮助,将不胜感激。

标签: phplaravelvue.jsaxios

解决方案


确保您在app/Providers/RouteServiceProvider.php中的路由文件上启用了 Web 中间件

然后检查app/Http/Kernel.php\Illuminate\Session\Middleware\StartSession::class添加并启用的$middlewareGroups['web']


推荐阅读