当前位置: 首页 > 知识库问答 >
问题:

Codeigniter RESTServer会话

寿子轩
2023-03-14

我正在使用CodeIgniter和RestServer实现构建一个APIhttps://github.com/chriskacerguis/codeigniter-restserver

我想使用会话身份验证模式,所以我在配置/rest.php中设置了这个:

$config['rest_auth'] = 'session';
$config['auth_source'] = 'userdata';

在config/config中。php:

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

我有一个控制器身份验证,其代码如下:

class Auth extends My_Controller
{

    public function __Construct(){
        parent::__construct();

    }

    public function index(){


        $user = array(
            "id" => "1",
            "first_name" => "First",
            "insertion" => "",
            "last_name" => "Last"
        );

        $this->session->userdata = $user;

        pr($this->session->userdata);
    }
}

会话存储在数据库中,并包含来自$user的数据。pr回显数据(pr在钩子中定义,并打印r($data))

但是当我运行一个扩展REST_控制器的控制器时,我总是得到一个{“status”:false,“error”:“Unauthorized”}错误。

我已经搜索了很多,但是我找不到解决这个问题的方法(或者没有人使用会话身份验证方法?),但是也许这里有人知道解决方案?

谢谢

编辑:我的API函数之一的控制器:

class Club extends REST_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->model('Club_model');        
    }

    public function index_get(){
        if(!$this->get('id')){
            $clubs = $this->Club_model->get_all_clubs();
        }else{
            $clubs = $this->Club_model->get_club($this->get('id'));
        }

        if($clubs){
            $this->response($clubs, 200);
        }else{
            $this->response(null, 404);
        }
    }

编辑2:autoload.php我在配置/autoload.php中添加了会话

$autoload['libraries'] = array('database','session');

共有2个答案

武卓
2023-03-14

这不是错误

您必须将会话变量写入

$config['auth_source'] = '';

我编写了这段代码并解决了这个问题(在config/rest.php中从上到下替换代码)

$config['auth_source'] = '__ci_last_regenerate';
萧升
2023-03-14

测试这个。

$user = array(
        "id" => "1",
        "first_name" => "First",
        "insertion" => "",
        "last_name" => "Last"
    );

    $this->session->userdata = $user;

然后以您的配置为例

$config['auth_source']='last_name';

 类似资料:
  • Django 提供对匿名会话的完全支持。其会话框架让你根据各个站点的访问者存储和访问任意数据。它在服务器端存储数据并抽象Cookie 的发送和接收。Cookie 包含会话的ID —— 不是数据本身(除非你使用基于Cookie 的后端)。 启用会话 会话是通过一个中间件实现的。 为了启用会话功能,需要这样做: 编辑MIDDLEWARE_CLASSES 设置并确保它包含'django.contrib.

  • 会话(Cookie)查询与修改操作类 进程: 主进程​ 1 const {session} = require('electron') 2 //查询所有Cookie。 3 session.defaultSession.cookies.get({}, (error, cookies) => { 4 console.log(error, cookies) 5 }) 6 //查询与特定网址相关联的所有C

  • 分布式的 servlet 容器必须支持 Java EE 实现机制所必需的其他 Java EE 对象从一个 JVM 迁移到另一个。

  • 超文本传输协议(HTTP)被设计为一种无状态协议。为构建有效的 Web 应用,使来自一个特定的客户端的请求彼此相关联是必要的。随时间的推移,演变了许多会话跟踪机制,这些机制直接使用对程序员而言是困难或麻烦的。 该规范定义了一个简单的 HttpSession 接口,允许 servlet 容器使用几种方法来跟踪用户会话,而不会使应用开发人员陷入到这些方法的细节中。

  • 会话功能的开启,首先要配置hi-nginx。如下所示: userid on; userid_name SESSIONID; userid_domain localhost; userid_path /; userid_expires 5m; hi_need_cookies on; hi_need_session on; 特别要注意的是,us

  • 我在Tomcat7中有一个web应用程序,它将会话中的用户信息作为DTO对象保存。我还为我的项目启用了Spring Security性,如果用户没有会话,它会自动将用户重定向到登录页面。 如果我登录到应用程序一次,然后在Eclipse中重新启动Tomcat,会发生的情况是,我的会话被冲出,但cookie没有运行。 Edit:尽管Firefox说,但如果关闭并重新启动Firefox,cookie仍然

  • 在发布这个问题之前,我谷歌了很多这个问题,并且在网络Socket@ServerEndpoint中从HttpServletRequest访问Http会话是我能找到的最好的问题/答案之一,但它似乎不能解决我的问题。 我可以通过这种方式从websocket访问HttpSession,但是我无法访问与普通HTTP请求相同的CDI会话bean实例。 我也尝试在会话中存储Weld实例,并尝试在WebSocke

  • 成功登录后,我想用新的url继续进行进一步的请求处理。但url正在调用springmvc中的公开服务,其中的安全配置不会检查会话身份验证以获取传入url。请看下面的代码。 当jsp页面提交登录验证时,J_security_check调用目标url,该URL随后调用拦截器模式/home*并验证登录凭证。 如果我在登录之前调用公开的服务“/address/userid/”,它将直接调用服务方法,使其成