Работа над приложением Laravel, посредством которого я выполняю аутентификацию для API, который требует, чтобы токен передавался при входе в систему, а последующие запросы должны передаваться с использованием токена.Логика входа в систему работает нормально.
У меня проблема с реализацией функциональности, из-за которой по истечении времени истечения пользователь должен быть перенаправлен на страницу входа для повторной регистрации, чтобы выдать новый токен.
~ Помогите, пожалуйста?
Логика входа
public function login(Request $request){
try {
$username = $request['user'];
$access_type = GeneralHelper::checkInput($username);
//Data to the passed to the API
$data = array(
$access_type => $username,
'password' => $request['password'],
'login_type' => $access_type,
'access_type' => 'web',
);
//Hit teh API and get a response
$loginstatus = GeneralHelper::login_Curl($data, 'api/v1/auth/login');
//Get the response which is success in this case
$res_status = $loginstatus->status;
//If suucess is true put some data in a session
if ($res_status == 'success') {
Session::put('user', $loginstatus->data->user);
Session::put('access_token', $loginstatus->data->access_token);
Session::put('refresh_token', $loginstatus->data->refresh_token);
Session::put('expiry', $loginstatus->data->expires_in);
} elseif ($res_status == 'failure') {
return redirect('/login')->with('error', $loginstatus->message);
}
} catch (\Exception $e) {
return $e->getMessage() . "\n at LINE " . $e->getLine();
}
}
Функция проверки наличия токена
public function checkAccessToken(){
//Return true if token is available
if(!is_null(session('access_token'))){
return true;
}
else {
return false;
}
}
Пример ответа, получаемого от API после его нажатия
{
"request_time": "2018-12-10 13:36:19",
"response_time": "2018-12-10 13:36:19",
"status": "success",
"message": "login",
"data": {
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUz******************",
"refresh_token": "def5020018e6345ab78d32*********************",
"isAgent": true,
"user": {
"firstname": "*************",
"middlename": "*************",
"surname": "************",
"phone": "25***********",
"email": "*************",
"tax_id": "************",
"passport_no": null,
"national_id": "***********",
"dob": null
}
}
}
Функция checkAccessToken
public function getLifePolicies(){
if(!$this->checkAccessToken()){
return redirect('/')->with('error','Your session has expired. Please Login again');
}
else{
//Perform other action
}
}