【发布时间】:2020-11-23 04:34:44
【问题描述】:
我正在尝试使用 laravel 网络路由创建登录页面。当用户登录时,会话记录将被保存到数据库中。但在会话表中,user_id 总是得到null 值。
我发现在Illuminate\Session\DatabaseSessionHandler 中,函数userId() 总是返回null。这是因为我为api 设置了默认guard。这是我的config/auth.php:
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
当我将默认保护更改为web 时,数据库中的列user_id 的值为授权用户ID。我不想将我的默认守卫更改为web。
如何为会话设置保护驱动程序?有没有Auth之类的,我们可以用Auth::guard('web')。
谢谢
【问题讨论】:
-
'api' 通常用于无状态 api,这就是为什么该守卫默认不使用会话的原因......为什么你不想使用“网络”守卫(考虑到你想要会话) ?
-
我网站的另一部分默认使用
api,所以我不想更改这些部分。 -
如果您已经在使用名为 'api' 的防护装置,该防护装置已按照您的需要进行配置,那么您就不想进入并更改该防护装置……听起来您需要使用 2不同的守卫,所以你需要使用另一个守卫,你只需要明确地使用它,
Auth::guard('web')->....(如果它不是默认值,你必须像那样访问它,但你可以在运行时调整默认值) -
我已经使用
Auth::guard('web')->attempt($credentials)进行登录,它运行良好,但在会话表中,user_id始终为空。