【问题标题】:Laravel: What is "remember_token" in the "users" DB table?Laravel:“用户”数据库表中的“remember_token”是什么?
【发布时间】:2014-06-09 08:26:38
【问题描述】:

在用户表中使用remember_token 来验证用户进入应用程序是否安全?

这个令牌的目的是什么?目前,我在表单中使用它来检查用户是否登录 - 如果令牌不存在,我会显示登录屏幕。每次用户注销时,都会重新生成此令牌。

【问题讨论】:

    标签: laravel security authentication token


    【解决方案1】:

    没有。它不应该用于身份验证。框架使用它来帮助防止Remember Me cookie 劫持。该值在登录和注销时刷新。如果 cookie 被恶意人员劫持,注销会使劫持的 cookie 失去作用,因为它不再匹配。

    请参阅此文档:

    https://laravel.com/docs/4.2/upgrade#upgrade-4.1.29

    【讨论】:

    • OAuth 只是为了安全地建立跨源身份验证。祝你好运并小心,不要掉以轻心,因为你可能会向公众开放整个数据库而你没有意识到这一点!我花了几天时间阅读和沙盒宠物项目,但我仍然是菜鸟! :)
    • 1.使用 API(OAuth 使用的数据库)注册用户。 2.用户登录应用,应用发送token请求并获取,因为用户合法。 3. 用户可以使用令牌进行请求进行验证。简而言之。 :)
    • 我总是使用 postman REST 客户端进行测试。 chrome.google.com/webstore/detail/postman-rest-client/…
    • 我创建了一个聊天室以在正确的位置继续对话。 chat.stackoverflow.com/rooms/51330/…
    【解决方案2】:

    我必须将remember_token 添加到我的用户表迁移中才能使Auth::logout() 正常工作。

    remember_token 添加到我的迁移中。

    <?php
    
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
    
    class CreateUsersTable extends Migration {
    
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            //
            Schema::create('users', function(Blueprint $table)
            {
                $table->increments('id');
                $table->string('lname', 32);
                $table->string('fname', 32);
                $table->string('username', 32);
                $table->string('email', 320);
                $table->string('remember_token', 100);
                $table->string('password', 64);
    
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            //
            Schema::drop('users');
    
        }
    
    }
    

    您必须从命令行删除用户表,然后迁移/种子。

    【讨论】:

    • 只是想指出一个小的变化——根据 [Laravel 升级指南][laravel.com/docs/upgrade#upgrade-4.1.26] remember_token 应该是 100 而不是 64——所以 $table-&gt;string('remember_token', 100);
    • 和 ->nullable() "你应该验证你的用户(或等效的)表包含一个可以为空的、100 个字符的字符串 remember_token 列"
    【解决方案3】:

    即使这是一个老问题,我也想提出一个选项,如果你不需要它,就不要使用令牌(例如,在你的网站上没有记住我的选项)。

    您可以阻止 Auth::logout() 设置它,而不是向您的用户表添加一个虚拟列。

    只需将其添加到您的用户模型(从 Laravel 5.6 开始工作):

    public function save(array $options = array()) {
        if(isset($this->remember_token))
            unset($this->remember_token);
    
        return parent::save($options);
    }
    

    这会在模型保存之前删除“remember_token”列,从而防止由于不存在的列而引发错误。

    【讨论】:

    • 这个帮助也完全在 5.2 中
    【解决方案4】:

    Laravel 在隐藏输入中提供了一个CSRF 令牌,无论您是否登录,它都会在提交表单时自动添加和验证。如果您使用的是他们的表单生成器,那么您甚至不需要检查它就可以发生这种情况。

    您应该使用Auth 外观检查用户是否在提交时登录。

    【讨论】:

      猜你喜欢
      • 2017-05-03
      • 2022-10-24
      • 1970-01-01
      • 2020-11-01
      • 1970-01-01
      • 2016-01-09
      • 2011-12-14
      • 2015-03-19
      • 2014-11-12
      相关资源
      最近更新 更多