使用laravel 5.5 tymon jwt为移动应用创建令牌(对于没有经过身份验证的用户)

时间:2018-05-23 07:56:26

标签: laravel-5 jwt

如标题中所示,我想确保在移动应用或网络浏览器中使用API​​的用户是使用我的网站或我的移动应用的用户,没有第三方可以使用我的API

这可以通过为可以使用正确凭据登录的用户创建令牌来轻松完成,但我的项目包含经过身份验证的用户或未经过身份验证的用户可以执行CRUD的部分

基本上我只希望使用我的移动应用或我的网站的用户能够使用我的API,除了被授予访问权限的用户使用我的API之外,没有第三方可以使用我的API

1 个答案:

答案 0 :(得分:0)

好吧,您可以从import com.intellij.openapi.diagnostic.Logger def ctx = context(scope:closureScope()) contributor(ctx) { Logger.getInstance("my-psi").info("I am here") } 检查ApiController并查看其标题。为此,您必须创建一个名为user_token的表。该表应如下所示:

user_tokens

此表与+-----+---------+-----------+------------+ | id | user_id | usertoken | timestamps | +-----+---------+-----------+------------+ 表具有one-to-one关系。在您要使用users的设备中,您必须将此apiuser_id作为usertoken传递。然后,您必须通过以下代码检查headers中的标头进行身份验证:

ApiController

以下是从api登录的示例:

public function checktoken(Request $request){

    if ($request->headers->has('usertoken')) {
        $token = $request->header('usertoken');
        $usertoken = UserToken::where('usertoken',$token)->first();

        if ($usertoken) {
            return $usertoken;
        }

        return false;        
    }

    return false;
}

现在您可以通过此方式检查来自服务器端的令牌(用户想要更改密码):

public function postlogin(Request $request){

    $validator = Validator::make($request->all(), User::$auth_rules);

    if ($validator->fails()){
        $result['status']='fail';
        $result['message']='Validation unseccessful';
        return $result;
    }

    $remember=$request->has('remember')?true:false;
    $user=User::where('email',$request->get('email'))->first();

    if (Auth::attempt(array('phone' => $request->input('email'), 'password' => $request->input('password')), $remember)){
        $usertoken=new UserToken;
        $usertoken->user_id=$user->id;
        $usertoken->usertoken=$user->remember_token;
        $save=$usertoken->save();

        if ($save){
            $usertoken=UserToken::where('user_id', $user->id)->first();
            $token=$usertoken->usertoken;
            if (!$token) {
                $token=str_random(60);
                $usertoken->usertoken=$token;
                $update=$usertoken->update();
            }               
            $result['status']='success';
            $result['message']='Login successful';
            $result['data']=$token;
            return $result;
        }                   
    }

    $result['status']='fail';
    $result['message']='Invalid credentials';
    return $result;

}

希望这有帮助。