1

我正在使用 lumen 进行 API 开发。我在 Lumen 自定义身份验证中遇到问题。当用户的凭据和 account_name 与存储的记录匹配时,我想登录用户。在凭证字段中没有用户名和密码类型数据。

这是我的登录方法

public function login(Request $request)
{

    $this->validate($request,[
        'data.credentials' => 'required',
        'data.account_name' => 'required',
    ]);

    try {
        $credentials=$request->data['credentials'];
        $account_name=$request->data['account_name'];
        $user=User::where('account_name',$account_name)->where('credentials',$credentials)->first();

        if($user){
            // storing the authenticated user to the guard session

            $auth_token=Hash::make($account_name . ":" . $credentials);

            // update user auth token
            $user->auth_token=$auth_token;
            $user->update();

            $data="Some Data";

            return response()->json([
                "auth_token"=> $auth_token,
                "data"=>$data,
                "request_id"=> uniqid(),
                "status"=> "success"
            ]);


        }

    } catch (\Exception $e) {
        return response()->json(array(
            'error' => $e->getMessage(),
            'status' => 'failed',
            'status_code' => 500
        ));
    }

}

我使用凭据对用户进行了身份验证,我想将该用户存储在可以是默认保护或自定义的保护中,并希望从每个响应中返回 auth_token。如果我使用以下代码,它会给我一个错误。

Auth::guard()->attempt(['credentials'=>$credentials,'account_name'=>$account_name]);

它给出了一个尝试未定义方法的错误。如果我使用以下代码

Auth::guard()->check(['credentials'=>$credentials,'account_name'=>$account]);

它返回 false 值并且不将用户存储在警卫中。我希望从我应用身份验证中间件的每个请求中获得这种类型的响应

return response()->json([
        "auth_token"=> auth()->user()->auth_token,
        "data"=>$data,
        "request_id"=> uniqid(),
        "status"=> "success
]);

以下是我的 AuthMiddleware.php 代码

$header=$request->header('Auth-Token');
if(Auth::guard('api')){
        // we can use $user variable for further :)
        return $next($request);
  }
4

0 回答 0