BadMethodCallException:方法 Laravel\Passport\Guards\TokenGuard::attempt 不存在。在文件 C:\xampp\htdocs est\passportapi\laravel-backend-api endor\laravel ramework\src\Illuminate\Macroable\Traits\Macroable.php 第 112 行
auth()->guard('api')->尝试($request->only(['email', 'password'])))
无论是否支持护照, 因为这个错误出现在我的最后。 怎么解决这个问题?
config->auth.php `page`
'company' => [
'driver' => 'session',
'provider' => 'company_users', // Use the appropriate provider
],
'api' => [
'driver' => 'passport', // set this to passport
'provider' => 'company_users',
'hash' => false,
]
if (Auth::guard('api')->attempt($request->only(['email', 'password']))) {
$user = Auth::guard('api')->user();
$token = $logUser->createToken('MyApp')->accessToken;
它不起作用
Laravel
passport
(TokenGuard
) 没有 attempt()
方法。它使用 OAuth2
标记,而不是 session
。
正如您所分享的,您可以像这样创建您的令牌。
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if (auth()->attempt($credentials)) { // web login
$user = auth()->user();
$token = $user->createToken('MyApp')->accessToken;
return response()->json(['token' => $token], 200);
} else {
return response()->json(['error' => 'Unauthorized'], 401);
}
}
然后在配置中
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'passport',
'provider' => 'users', // **** make sure this is correct(main user model should be here.) you're using `company_users` make sure it's the main user table which uses web login
'hash' => false,
],
],
最后,在您的请求中,如果您将
Authorization
标头与 Bearer
一起传递,这将起作用。
确保您的模型(在我的
中,根据您的代码users
)具有称为company_users
HasApiTokens
的特征
问题在于
attempt
是 SessionGuard
的方法,但不是 TokenGuard
。
如果您想在为用户创建令牌之前对用户进行身份验证,请使用
web
防护。