Laravel - 具有不同登录凭据的多种用户类型
Posted
技术标签:
【中文标题】Laravel - 具有不同登录凭据的多种用户类型【英文标题】:Laravel - Multiple User Types with different Login Credentials 【发布时间】:2021-09-24 19:20:47 【问题描述】:我目前无法确定在以下情况下哪种解决方案最好。
我需要 2 个不同的帐户,即:客户和管理员。
但是,两种帐户类型都有不同的登录凭据,即 管理员使用电子邮件和密码登录。 客户使用用户名和客户代码登录。
我目前正在使用 Laravel 8 和 Jetstream。
我还创建了单独的用户模型,它们都继承了由 JetStream 自动创建的用户模型
请问有没有一种方法可以让我为 2 种不同的帐户类型使用不同的登录凭据?如果是这样,最好的方法是什么。
提前致谢。
【问题讨论】:
只需创建 2 个不同的登录表单 Spatie 角色和权限 【参考方案1】:设置不同的身份验证保护,例如users
和 admin
。这样你就可以单独登录了
https://laravel.com/docs/master/authentication#adding-custom-guards
您可以为应用程序的相关部分指定要使用的保护。这可以使用路由中间件来完成,您可以在config/auth.php
中设置默认值
例如
use Illuminate\Support\Facades\Auth;
Auth::shouldUse('admin');
// or
Auth::guard('admin')->login(...);
// or
Auth::guard('users')->attempt($request->only('username', 'customer_code'));
Auth::guard('admin')->attempt($request->only('email', 'password'));
【讨论】:
下面的代码应该放在哪里? 堆栈溢出不是为了引导您完成解决方案,而是为了回答问题或为您指明正确的方向。这篇中等文章可能有助于更多动手解决方案:medium.com/@sagarmaheshwary31/…【参考方案2】:您可以扩展 FortifyServiceProvider 类并在引导方法中根据用户角色定义您的逻辑。这是一个简单的例子。
public function boot()
// authenticate user using email or phone number
Fortify::authenticateUsing(function (Request $request)
$user = User::where('email', $request->username)
->orWhere('phone', $request->username)->first();
->orWhere('username', $request->username)->first();
if ($user &&
Hash::check($request->password, $user->password)
)
return $user;
);
【讨论】:
以上是关于Laravel - 具有不同登录凭据的多种用户类型的主要内容,如果未能解决你的问题,请参考以下文章