【问题标题】:Auth guard('web') not working in laravel 6.2身份验证守卫('web')在 laravel 6.2 中不起作用
【发布时间】:2020-08-21 13:48:48
【问题描述】:

我正在使用正在更改 UI 的客户端项目。所以它的 Auth::guard('web') 在客户端服务器中工作。但是当我尝试将该项目用于我的 wamp 服务器(localhost) 时,它无法正常工作。它不会返回登录用户数据,而是将数据返回到 LoginController。整个代码在客户端服务器(共享服务器)中工作。所以当它的控制器发生变化时,它不会返回数据。这是在我不再面临这个问题之前。我在谷歌搜索并做了很多改变来解决这个问题,但没有得到我的解决方案。我的 laravel 版本是 6.2。所以我来到了这里。请不要投反对票...

请帮忙。

auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
 .....

  'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

route.php

  Route::get('/','IndexController@index');  // here i am calling auth guard .
  Route::get('',['as'=>'posts','uses'=>'IndexController@index']); 

登录控制器.php

public function login(Request $request)
{
  $this->validate($request, [
    'login'    => 'required',
    'password' => 'required',
]);

$login_type = filter_var($request->input('login'), FILTER_VALIDATE_EMAIL ) 
    ? 'email' 
    : 'username';

$request->merge([
    $login_type => $request->input('login')
]);

if (Auth::attempt($request->only($login_type, 'password'))) {
       
        $request->session()->regenerate();
        $previous_session = Auth::User()->session_id;
        if ($previous_session) {
            Session::getHandler()->destroy($previous_session);
        }

        Auth::user()->session_id = Session::getId();
        Auth::user()->save();
     
        $user = auth()->guard('web')->user();
        $this->clearLoginAttempts($request);
        
        return response()->json([
            'status'        => 'S',
            'message' => 'Login Successfuly.'
        ], 201);

  }

return response()->json([
        'status'        => 'F',
        'message' => 'Unauthorized - Password Not matched.'
    ], 401);

}

索引控制器

# for Test login 
   if(  Auth::guard('web')->user())
    {
        return Auth::guard('web')->user();
    }

【问题讨论】:

  • 我收到 CSRF 令牌 419 错误。所以我忽略了csrf令牌形式的VerifyCsrfToken

标签: php laravel authentication laravel-6.2


【解决方案1】:

我在朋友的帮助下解决了我的问题..
问题出在 env 文件中。

APP_URL=localhost 

所以基本逻辑是你必须运行 php artisan serve,它会为你提供 localhost。所以之后你将能够获得 Auth 数据。

因此,当您遇到来自 Auth::user() 的 null 时,请检查您的 env 文件中的 APP_URL

错误的APP_URL会给你CSRF token错误。

【讨论】:

  • 是的,答案对我很有帮助。我这样解决了我的问题。
  • 不错的解决方案兄弟..感谢您提供详细信息。我得到了答案。爱你。
猜你喜欢
  • 2021-05-01
  • 2018-11-21
  • 2018-05-12
  • 1970-01-01
  • 2017-11-16
  • 2015-02-25
  • 2016-10-21
  • 2020-07-23
相关资源
最近更新 更多