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】:

设置不同的身份验证保护,例如usersadmin。这样你就可以单独登录了

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 - 具有不同登录凭据的多种用户类型的主要内容,如果未能解决你的问题,请参考以下文章

Laravel:多种用户类型的表结构,多态关系

Laravel 4 登录凭据不匹配不会发回错误数据

Laravel:针对远程检查凭据的系统进行身份验证

laravel - 在登录移动应用程序时保存会话凭据

Django:两种类型的用户同时登录

C# 使用登录的用户凭据启动进程