示例#1
0
 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;
 }
示例#2
0
 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;
 }
示例#4
0
 /**
  * @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();
 }
示例#5
0
 /**
  * @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);
 }
示例#9
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getAccessTokens()
 {
     return $this->hasMany(AccessToken::className(), ['user_id' => 'id']);
 }