Laravel 护照 API

问题描述 投票:0回答:2

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;

它不起作用

php laravel laravel-passport
2个回答
0
投票

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

特征

0
投票

问题在于

attempt
SessionGuard
的方法,但不是
TokenGuard

如果您想在为用户创建令牌之前对用户进行身份验证,请使用

web
防护。

© www.soinside.com 2019 - 2024. All rights reserved.