создать токен с помощью laravel 5.5 tymon jwt для мобильного приложения (для пользователей, не прошедших проверку подлинности) - PullRequest
0 голосов
/ 23 мая 2018

, как указано в заголовке. Я хочу убедиться, что пользователи, использующие API, будь то в мобильном приложении или в веб-браузере, являются теми, кто использует мой веб-сайт или мое мобильное приложение, никакая третья сторона не может использовать мой API

это можно легко сделать, создав токен для пользователей, которые могут войти в систему с правильными учетными данными, но мой проект состоит из частей, в которых аутентифицированные пользователи или пользователи, не прошедшие аутентификацию, могут выполнять CRUD

, поэтому в основном я хочутолько пользователи, которые используют мое мобильное приложение или мой веб-сайт, чтобы иметь возможность использовать мой API, никакие третьи лица не могут использовать мой API, кроме тех, кому предоставлен доступ к использованию моего API

1 Ответ

0 голосов
/ 23 мая 2018

Ну, вы можете объявить ApiController, где вы можете проверить user_token и проверить их заголовки.Для этого вам нужно создать таблицу с именем user_tokens.Таблица должна выглядеть следующим образом:

+-----+---------+-----------+------------+
| id  | user_id | usertoken | timestamps |
+-----+---------+-----------+------------+

Эта таблица имеет отношение one-to-one к таблице users.С устройства, в котором вы хотите использовать api, вы должны передать эти user_id и usertoken как headers.Затем вы должны проверить заголовки вашего ApiController для проверки подлинности с помощью кода ниже:

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;
}

Вот пример входа в систему с API:

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;

}

Теперь вы можетепроверьте токен как аутентификацию со стороны сервера следующим образом (предположите, что ваш пользователь хочет сменить пароль):

public function postchangepassword(Request $request){

    $usertoken = $this->checktoken($request); // this here gets the token for authentication

    if ($usertoken) {
        $validator = Validator::make($request->all(), User::$password_rules);
        if ($validator->fails()){
            $result['status']='fail';
            $result['message']='Validation unseccessful';
            return $result;
        }

        $user=$usertoken->user()->first(); // you are geting authenticated user by this

        if(Hash::check($request->get('password'), $user->password)){    

            $user->password=bcrypt($request->get('newpassword'));
            $update=$user->update();

            if($update){
                $result['status']='successful';
                $result['message']='Password updated';
                return $result; 
            }

            $result['status']='fail';
            $result['message']='Password could not be updated';
            return $result;
        }

        $result['status']='fail';
        $result['message']='Current password is wrong';
        return $result;
    }

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

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...