尝试使用if(!Auth::guard('mobile')->attempt($credentials))在Laravel中创建非默认保护的凭据

yc0p9oo0  于 2023-03-09  发布在  其他
关注(0)|答案(2)|浏览(230)

在我的项目中,我有两个保护,第一个是"web",与admins表相关,带有会话驱动程序,第二个是"mobile",与users表相关,带有令牌驱动程序。

'defaults' => [
    'guard' => 'web',
    'passwords' => 'admins',
],
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
    'mobile' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],
  • 注意:我使用的是密室认证系统 *

因此,我尝试使用第二个防护登录,当我尝试使用凭据时,出现错误:

public function login(Request $request)
{
   .............

     if(!Auth::guard('mobile')->attempt($request->only(['email', 'password']))){
        return response()->json([
           'status' => false,
           'message' => 'Email & Password does not match with our record.',
       ], 401);
     }
        
   .............

}

错误:
"调用未定义的方法Illuminate\Auth\TokenGuard::attempt()"
那么如何检查非默认卫士的凭据,或者有什么建议?

8hhllhi2

8hhllhi21#

如果你正在使用sancutum那么你可以这样做

public function login(Request $request)
    {
        $user= User::where('email', $request->email)->first();
            if (!$user || !Hash::check($request->password, $user->password)) {
                return response([
                    'message' => ['These credentials do not match our records.']
                ], 404);
            }
        
             $token = $user->createToken('my-app-token')->plainTextToken;
        
            $response = [
                'user' => $user,
                'token' => $token
            ];
        
             return response($response, 201);
    }
vd8tlhqk

vd8tlhqk2#

@sanjog-karki您的解决方案对我有效,但我尝试了另一种解决方案,即复制“移动的”警卫,并将新警卫的驱动程序设置为:“session”,所以我可以使用Auth::guard(“new-guard”)-〉attempt($credintials)而没有任何问题。

'mobile' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
    'mobile-api' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],

现在我可以像这样检查凭据:

if(!Auth::guard('mobile')->attempt($request->only(['email', 'password']))){

   ........

}

我可以把它用在中间件中,就像这样:

Route::middleware('auth:mobile-api')->group(function () {
   .......
});

除非出了问题,否则我会坚持使用这个解决方案。

相关问题