【问题标题】:Laravel - authenticating with session tokenLaravel - 使用会话令牌进行身份验证
【发布时间】:2014-06-08 11:56:00
【问题描述】:

登录时,我以 JSON 形式返回用户对象 + 会话令牌,以便可以对连接到我的应用程序的移动设备进行身份验证。

但是,我很难理解如何仅使用用户的会话 ID 对用户进行身份验证?

登录后,移动设备会在每次请求时发送会话令牌,这意味着我需要以某种方式检查它是否是同一用户(使用自定义身份验证过滤器)。

我该怎么做?

【问题讨论】:

    标签: session laravel token


    【解决方案1】:

    您可能有一个用于保存令牌的表

    在 routes.php 中添加过滤器

    Route::group(array('before' => 'auth'), function() { ... })
    

    您可以在 filters.php 中搜索数据库中的令牌,如果不存在则返回无访问响应

    Route::filter('auth', function () {
    
    $input_token = Input::get('token');
    
    if (!empty($input_token)) {
        $validator = Validator::make(
            ['token' => $input_token],
            ['token' => 'token']
        );
        if (!$validator->fails()) {
    
            $token = Token::where('hash', $input_token)->first();
    
            if ($token) {
    
                $user = User::find($token->user_id);
    
                if ($user) {
    
                    Auth::login($user);
                    return;
    
                }
            }
        }
    }
    
    $response = Response::make(json_encode([
        'error' => true,
        'messages' => [
            Lang::get('errors.NO_ACCESS')
        ]
    ]), 200);
    
    $response->header('Content-Type', 'application/json');
    
    return $response;
    });
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      $sessionID = '4842e441673747d0ce8b809fc5d1d06883fde3af'; // get this from \Session::getId(); from your previous authenticated request (after logging in because it changes).
      
      $s = new \Illuminate\Session\Store(NULL, \Session::getHandler(), $sessionID);
      $s->start();
      $userID = $s->get('login_82e5d2c56bdd0811318f0cf078b78bfc');
      
      \Session::set('login_82e5d2c56bdd0811318f0cf078b78bfc', $userID);
      return \Auth::user();
      

      不是最漂亮的代码,但它可以工作。它使用先前的会话 ID 创建会话实例,然后开始从文件中加载它。用户 ID 在该键中,因此它只是在当前会话中设置用户 ID。然后,当您调用 Auth::user() 时,它会使用该用户 ID 加载用户。

      密钥中所有数字的原因是因为 larval 开发人员认为散列 Auth 类名称以使密钥尽可能唯一是明智之举... :-S

      【讨论】:

        猜你喜欢
        • 2014-09-26
        • 2014-10-30
        • 1970-01-01
        • 1970-01-01
        • 2020-09-29
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 2018-11-22
        相关资源
        最近更新 更多