我正在构建我网站的laravel API。我正在使用laravel 5.3
我正在使用API构建移动应用。
在登录部分,有两个字段:
在我的数据库中,电子邮件和用户名是不同的列。
这是功能:
public function authenticate()
{
$credentials=request()->only('username','password');
try {
$token=JWTAuth::attempt($credentials);
if(!$token){
return response()->json(['error'=>'credentials wrong'],401);
}
}
catch(JWTException $e) {
return response()->json(['error'=>'something_went_wrong'],500);
}
return response()->json(['token'=>$token],200);
}
此处仅使用用户名,我想同时使用用户名和密码。
如果需要任何其他信息,请询问。
TY:)
答案 0 :(得分:1)
您可以使用FILTER_VALIDATE_EMAIL功能 像这样: -
$login_type = filter_var( $data['email'], FILTER_VALIDATE_EMAIL ) ? 'email' : 'username';
然后传递auth尝试功能,如下所示: -
Auth::attempt([$login_type => $data['email'], 'password' => $data['password']])
在你的情况下: -
According to your Html you have used two input
<input type="text"required autocomplete="off" name="loginEmail" id="inputname"/>
<input type="password"required autocomplete="off" name="loginPassword" id="inputpassword"/>
And your function is:-
public function authenticate(Request $request)
{
$data = $request->all();
$login_type = filter_var( $data['loginEmail'], FILTER_VALIDATE_EMAIL ) ? 'email' : 'username';
//$credentials=request()->only('username','password');
try {
$token=JWTAuth::attempt([$login_type => $data['loginEmail'], 'password' => $data['loginPassword']]);
if(!$token){
return response()->json(['error'=>'credentials wrong'],401);
}
}
catch(JWTException $e) {
return response()->json(['error'=>'something_went_wrong'],500);
}
return response()->json(['token'=>$token],200);
}
希望它有帮助!
在邮递员中,我在身体中使用了名为“用户名”的密钥,所以这里代替loginEmail,用户名将会来,它会正常工作! ty
答案 1 :(得分:0)
在AuthController
/**
* Get the needed authorization credentials from the request.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
protected function getCredentials(Request $request)
{
$login = $request->get('loginEmail');
$field = filter_var($login, FILTER_VALIDATE_EMAIL) ? 'email' : 'username';
return [
$field => $login,
'password' => $request->get('password'),
];
}