【发布时间】:2020-02-26 00:43:00
【问题描述】:
最近我试了一下最新的 Laravel(6.4)。试图实现基于 API 的简单登录功能。没有使用任何包,如 Passport 或 Tymon 的 JWT。我使用了非常基本的身份验证(只是在用户表中保留一个名为“api_token”的列)。但是遇到错误说
Symfony\Component\Debug\Exception\FatalThrowableError : 调用未定义的方法 Illuminate\Auth\TokenGuard::attempt()
这是我的控制器
//only method in the controller, so used `__invoke` method.
public function __invoke(Request $request)
{
$request->validate([
'email' => 'required',
'password' => 'required',
]);
$credentials = $request->only(['email', 'password']);
$credentials['active'] = 1;
if (Auth::guard('api')->attempt($credentials)) {
return response()->json([
'data' => 'Wrong credential given'
]);
}
return response()->json([
'data' => \auth()->user()
]);
}
这是我的config/auth.php 文件状态。我正在使用 api guard 进行访问。但是令牌应该在登录后出现。在这里,我无法登录。
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],
]
【问题讨论】:
-
不,它没有。我正在提供合适的后卫和提供者。但它仍然显示我提到的错误
-
你可以使用
Auth::once($credentials),在this docs page上搜索Authenticate A User Once。 `。 您可以使用 once 方法将用户登录到应用程序的单个请求。不会使用任何会话或 cookie,这意味着此方法在构建无状态 API 时可能会有所帮助 -
现在它显示“调用未定义的方法 Illuminate\Auth\TokenGuard::once()”