laravel - 仅使用 Lumen 中的电子邮件登录 (JWT Auth)
问题描述
我想在登录系统时设置密码可选。如果用户输入密码,登录工作正常并返回 jwt 令牌,当我输入尝试仅使用电子邮件登录时,它会出现以下错误:-
Undefined index: password (500 Internal Server Error)
以下是我的登录方法的代码
public function authenticateUser($request)
{
$input = $request->only('email','password');
if (!$authorized = Auth::attempt($input, true)) {
return $this->failure('Credentials doesnot match our records!', 401);
} else {
$token = $this->respondWithToken($authorized);
return $this->success('Login Successfully !', $token, 200);
}
}
protected function respondWithToken($token)
{
return [
'token' => $token,
'token_type' => 'Bearer',
'expires_in' => Auth::factory()->getTTL() * 60,
'user' => Auth::user()
];
}
所以基本上,我想要的是当用户输入电子邮件时它将登录并应该返回令牌,如果用户使用电子邮件和密码登录,那么它也应该工作并返回令牌。
解决方案
您可以创建一个自定义身份验证用户提供程序来解决这个可能缺少的“密码”字段。不过,我可能不会在这里。您可以自己检查输入以查看是否有密码。如果有attempt
正常通过。如果不存在使用配置的用户提供程序找到用户并登录到警卫(attempt
正在做什么)。
也许是这样的:
public function authenticateUser($request)
{
if ($request->has('password')) {
$token = Auth::attempt($request->only(['email', 'password']));
} else {
$token = ($user = Auth::getProvider()->retrieveByCredentials($request->only(['email'])))
? Auth::login($user)
: false;
}
return $token
? $this->success('Login Successfully !', $this->respondWithToken($token), 200)
: $this->failure('Credentials do not match our records!', 401);
}
推荐阅读
- javascript - javascript .js 文件外部网址
- css - 背景图像未显示在我的反应应用程序中
- java - 使用 OkHttp 获取请求时发生 Java.net.SocketException
- java - 如何提高具有嵌套循环的算法的时间复杂度?
- reactjs - React useEffect 无限循环从 api 获取数据
- python - 我可以在 pytorch 中创建上三角张量吗?
- reactjs - React 上传 SVG 文件并创建组件
- javascript - 使用 Vanilla JavaScript 表单“必需”验证
- python-3.x - 如何在 webkit2gtk 中进行标题更改调用?
- apache-spark - 从 databrick 在 adls gen 1 中写入 tsv 文件时行分隔符更改