public static function make(User $user) { $access_token = new AccessToken(); $access_token->token = str_random(255); $access_token->user_id = $user->id; $access_token->expires_at = new \DateTime('now + 30 days'); $successful = false; while (!$successful) { try { $successful = $access_token->save(); } catch (QueryException $e) { $successful = false; } } return $access_token; }
public function logout(LogoutRequest $request) { if ($loggedout = AccessToken::logout($request->input())) { $message = $this->getMessage('success', ['loggedout' => $loggedout]); } else { $message = $this->getMessage('error', [Request::ERROR_DATABASE_ACCESS_TOKEN_NOT_FOUND]); } return json_encode($message); }
public function getTokenExpiry() { $user = \Yii::$app->getUser(); $sessionId = \Yii::$app->session->getId(); if ($this->accessToken == null) { $this->accessToken = AccessToken::find()->where(['user_id' => $user->id])->andWhere(['session_id' => $sessionId])->one(); if ($this->accessToken == null) { return 0; } } $createdDate = new \DateTime($this->accessToken->created); return ($createdDate->getTimestamp() + $user->authTimeout) * 1000; }
/** * @param array $params * @return mixed * @throws BadRequestException */ public function login($params = array()) { $defaults = array('email' => $email = null, 'password' => $password = null); $rules = array('email' => array('required', 'email', 'exists:users,email,login_type,' . User::LOGIN_TYPE_PASSWORD . ',deleted_at,NULL'), 'password' => array('required')); $params = $this->validateParams($defaults, $params, $rules); extract($params); if (!$this->api->guard->attempt(array('email' => $email, 'password' => $password, 'login_type' => User::LOGIN_TYPE_PASSWORD, 'deleted_at' => null))) { throw new BadRequestException("Your credentials are incorrect. Please try again."); } $user = $this->api->user(); $access_token = AccessToken::make($user); return AccessToken::where('token', $access_token->token)->firstOrFail(); }
/** * @inheritdoc */ public static function findIdentityByAccessToken($token, $type = null) { $tokenData = AccessToken::find($token)->where(['token' => $token])->one(); if ($tokenData !== null) { $user = User::find()->where(['id' => $tokenData->user_id])->one(); if ($user !== null) { return new static($user->toArray()); } else { return null; } } else { return null; } }
public function login(LoginRequest $request) { $credentials = $request->only('password', 'email'); if ($user = User::email($credentials['email'])->first()) { $password = $credentials['password']; if (Hash::check($password, $user->password)) { $access_token = AccessToken::userId($user->id)->first(); if (!$access_token) { $access_token = AccessToken::create(['user_id' => $user->id, 'token' => Hash::make($user->email . $user->name)]); } $data = ['email' => $user->email, 'name' => $user->name, 'token' => $access_token->token]; return $this->respondSuccess('Successful Login', $data); } else { return $this->respondUnauthorized(); } } else { return $this->respondUnauthorized(); } }
/** * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { $message = []; $userId = $request->query('user_id'); $token = $request->query('token'); if (!$userId) { $message['error'][] = Request::ERROR_VALIDATE_USER_ID_REQUIRED; } if (!$token) { $message['error'][] = Request::ERROR_VALIDATE_ACCESS_TOKEN_REQUIRED; } if (!isset($message['error'])) { if (!AccessToken::expired($userId, $token)) { return $next($request); } else { $message['error'][] = Request::ERROR_VALIDATE_ACCESS_TOKEN_EXPIRED; } } return Response::json($message, 200); }
/** * Handle an incoming request. * Get the user associated with the access_token. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if ($token = $request->input('access_token', false)) { $cache = app('Illuminate\\Contracts\\Cache\\Repository'); $user = false; if ($cache->has($token)) { $user_id = $cache->get($token, false); $user = User::findOrFailCached($user_id); } elseif ($access_token = AccessToken::where('token', $token)->where('expires_at', '>', new \DateTime())->first()) { /** * Logging this because this shouldn't happen. */ app('log')->info('Looking up token in database.'); $user = $access_token->user; $cache->put($access_token->token, $user->id, $access_token->expires_at); } if ($user) { $this->guard->login($user); } } return $next($request); }
/** * @return \yii\db\ActiveQuery */ public function getAccessTokens() { return $this->hasMany(AccessToken::className(), ['user_id' => 'id']); }