laravel - 如何使用方法尝试() - Laravel 7
问题描述
我试图弄清楚是如何Auth::attempt()
工作的。它不会返回任何错误,但它也不起作用,只是返回 false。
我试图定义表名,我试图添加警卫,但我不确定它是如何工作的。
根据 Laravel 文档,如果我没记错的话,我应该为每个身份验证添加一个警卫(我需要使用不同的表进行身份验证)。
这就是我定义新警卫的方式:(我不确定它是否与我的问题有关)
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'web' => [
'driver' => 'session',
'provider' => 'guest',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
我的问题是如何验证从我想要使用的表中检索数据的用户,Auth::attempt()
还是应该使用我自己的方法?
我是 Laravel 的新手,所以有点困惑。
解决方案
一个明确的错误是,你不能有两个同名的守卫。
下一个错误可能是,您没有添加 provider 'guest'
,但这只能猜测。
我会这样做:
- 给您的第二个网络提供商取另一个名字。
- 确保您的第一个 web auth Guard 再次按预期工作
- 着手实施第二个网络身份验证保护
例如,您的 auth.php 可能如下所示:
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'guest' => [
'driver' => 'session',
'provider' => 'guest',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
'guest' => [
'driver' => 'eloquent',
'model' => App\Models\Guest::class,
],
]
当然,您还必须定义模型Guest
。
然后你可以做类似的事情:
Auth::guard('web')->attempt($credentials)
// or
Auth::guard('guest')->attempt($credentials)
需要考虑的事情
有时您认为您需要不同的表进行身份验证,但实际上,使用一个基本的用户表和身份验证守卫,然后使用其他表将用户连接到更多数据和角色,这可能是一种更容易的方法。
推荐阅读
- php - 在没有 javascript 的任何标签内添加 html
- javascript - 如何在 TinyMCE 中调用 javascript 函数?
- android - 没有 Playstore 的深度链接/应用程序链接
- c# - 如何在 C# 中创建一个接收字符串并根据内部逻辑返回值的简单 API?
- python - 将列作为参数传递给 pandas groupby 应用函数
- python - Pygame 不会在 M1 MacBook Air 上初始化游戏窗口
- mysql - Informix 数据库到 MySQL 数据库备份/记录替换与特定表
- html - 为什么我的位置绝对框会从外部泄漏内容
- javascript - 如何编辑完成提示?
- rfid - 标签数据中的 EPC 位方向