在Auth Guard中使用自定义字段和存储的流明自定义身份验证

时间:2017-12-27 07:37:45

标签: laravel api authentication lumen api-auth

我使用流明进行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]);

它给出了一个错误,即attempt_undefined_method。如果我使用以下代码

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

它返回false值,不会将用户存储在guard中。我想从我应用auth中间件

的每个请求中得到这种类型的响应
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);
  }

0 个答案:

没有答案
相关问题