codeigniter rest服务器库中基于令牌的身份验证

Nur*_*yev 10 php codeigniter-3 codeigniter-restserver

我正在尝试codeigniter使用Phil Sturgeon的休息服务器构建restful API

问题是我无法弄清楚如何进行基于令牌的身份验证.我正在为移动应用程序构建该API,它是通过HTTPS构建的.首先,用户将通过登录进行身份验证,然后他将能够使用应用程序功能.我想以这里解释的方式实现:基于令牌的身份验证如何工作

问题:

如果我在请求中向服务器发送令牌,我应该在哪里检查有效性?
休息服务器库是否支持基于令牌的验证?
如果它确实需要做哪些配置?或者我需要实现我的身份验证方法?

或者有更好/更简单的身份验证方式而不是基于令牌?

小智 5

它不支持令牌认证。这是我添加的修改。REST_Controller.php搜索“ switch($ rest_auth){”,添加这种情况:

        case 'token':
            $this->_check_token();
            break;
Run Code Online (Sandbox Code Playgroud)

然后添加此功能:

/** Check to see if the user is logged in with a token
 * @access protected
 */
protected function _check_token () {
    if (!empty($this->_args[$this->config->item('rest_token_name')])
            && $row = $this->rest->db->where('token', $this->_args[$this->config->item('rest_token_name')])->get($this->config->item('rest_tokens_table'))->row()) {
        $this->api_token = $row;
    } else {
        $this->response([
                $this->config->item('rest_status_field_name') => FALSE,
                $this->config->item('rest_message_field_name') => $this->lang->line('text_rest_unauthorized')
                ], self::HTTP_UNAUTHORIZED);
    }
}   
Run Code Online (Sandbox Code Playgroud)

config / rest.php

    // *** Tokens ***
/* Default table schema:
 * CREATE TABLE `api_tokens` (
    `api_token_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `token` VARCHAR(50) NOT NULL,
    `created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`api_token_id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
 */
$config['rest_token_name'] = 'X-Auth-Token';
$config['rest_tokens_table'] = 'api_tokens';
Run Code Online (Sandbox Code Playgroud)

  • 令牌到期怎么办? (2认同)