【问题标题】:Laravel Auth guard does not persist after redirect CustomUserLaravel Auth 防护在重定向 CustomUser 后不会持续存在
【发布时间】:2021-04-27 20:56:06
【问题描述】:

从 LoginController 重定向后 Auth::guard('user')->user() 返回 null

 public function userPostLogin(array $collection)
{
    return Auth::guard('web')->attempt($collection);

}

登录消费者

  public function userLoginAuthentication(Request $request)
{
    if ($request->get('phoneNumber') != null && $request->get('password') != null) {
        $login = new LoginDTO($request->get('regionCode'). ' ' .$request->get('phoneNumber'), $request->get('password'), $request->get('role'));
        $mapper = new LoginMapper();
        return $this->userLoginConsumer->userPostLogin((array)$mapper->objectToCollection($login));}

登录服务

public function loginAuthentication(Request $request)
        {
            $this->userLoginService->userLoginAuthentication($request);
                    return redirect()->route('user-home');

登录控制器

Auth::guard('web')->user() 在每一层中返回正确的用户。但是在重定向到 route('user-home') (或任何路由)时,相同的 Auth::guard('web')->user() 返回 null

      'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],
 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins'
        ],
        'admin-api' => [
            'driver' => 'token',
            'provider' => 'admins'
        ],

        'kitchen' => [
            'driver' => 'session',
            'provider' => 'kitchens'
        ],
        'kitchen-api' => [
            'driver' => 'token',
            'provider' => 'kitchens'
        ]
    ],

'providers' => [
        'users' => [
            'driver' => 'jsonresponse',
            'model' => CustomUser::class,
        ],

        'admins' => [
            'driver' => 'jsonresponse',
            'model' => CustomUser::class,
        ],

        'kitchens' => [
            'driver' => 'jsonresponse',
            'model' => CustomUser::class,
        ],

 'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

auth.php

【问题讨论】:

  • 所有这些路由都在web.php 文件中吗?
  • 都在user.php(自定义路由文件)
  • 您是否将“网络”中间件应用于这些路由?
  • Route::group(['middleware' => 'web'], function () { Route::get('/home', 'HomeController@index')->name('user -home'); });
  • 您是否在控制器中调用Auth::guard('web')->user()

标签: php laravel laravel-6


【解决方案1】:

您可以像这样在您的身份验证过程之后获得这样的用户:

Auth::user();

你也可以这样检查:

if (Auth::check()) {
    $user = Auth::user();
} else {
    echo "We do not have a authenticated user";
}

您应该将auth 中间件应用于这些路由

【讨论】:

  • 同样的结果。重定向后为空
  • 您应该将auth 中间件应用于这些路由
  • 中间件为空
【解决方案2】:

问题是我在实现Illuminate\Contracts\Auth\UserProvider对象时没有返回

public function retrieveById($identifier)

【讨论】:

    猜你喜欢
    • 2015-06-15
    • 2015-08-13
    • 2016-01-20
    • 2016-07-21
    • 1970-01-01
    • 2016-04-14
    • 2017-02-16
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多