使用电子邮件和用户名进行身份验证(相同字段)(laravel API)

时间:2017-06-07 04:23:05

标签: php laravel laravel-5 laravel-5.1 laravel-5.3

我正在构建我网站的laravel API。我正在使用laravel 5.3

我正在使用API​​构建移动应用。

在登录部分,有两个字段:

  1. 输入电子邮件或用户名
  2. 输入密码
  3. 在我的数据库中,电子邮件和用户名是不同的列。

    这是功能:

    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:)

2 个答案:

答案 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'),
    ];
}
相关问题