Ну, вы можете объявить 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;
}
Надеюсь, это поможет.