首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5.2.14具有Duxet/RethinkDB身份验证重定向用户,被视为家庭路由中的客人

问Laravel 5.2.14具有Duxet/RethinkDB身份验证重定向用户,被视为家庭路由中的客人
EN

Stack Overflow用户
提问于 2016-02-12 19:50:08
回答 1查看 277关注 0票数 2

使用一个干净的Laravel5.2.14安装,添加迁移和种子文件,使用artisan make:auth添加auth脚手架,然后使用MySQL运行这个脚手架,最后登录到仪表板,但当我添加Duxet/RethinkDB时,更新迁移、种子和用户模型,并尝试登录它,不再重定向到/home,而是返回到/login。您可以在Chrome的网络选项卡中看到,/login获得302错误,/home获得302错误,并返回到/login,指示主路由中间件中的一个问题。

代码语言:javascript
复制
login   302 text/html
home    302 text/html
login   200 document

不抛出任何异常或记录错误,但使用Monolog (/app/Http/Middleware/Authenticate)在Auth中间件中进行阻塞。语句Auth::guard($guard)->guest()总是返回1,指示用户是导致重定向的来宾,但它似乎是通过AuthController的AuthenticatesAndRegistersUsers子特征AuthenticatesUsers::login验证用户的身份。因此,单击导航中的home就可以重定向到登录,因为主中间件指示用户是来宾。

代码语言:javascript
复制
public function login(Request $request)
{
    $this->validateLogin($request);

    ...

    if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {

        Log::info('Successful Login!'); // Always gets here

        return $this->handleUserWasAuthenticated($request, $throttles);
    }

    Log::info('Failed Login!'); // Never gets here

    ...

如果我恢复到上一次只使用MySQL的提交,这一切都能工作,并且用户被重定向到仪表板。我一直在浏览web中间件组、auth中间件和AuthController特性,试图在没有运气的情况下解决这个问题。

有没有人遇到这种情况,并能指出一个潜在的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-13 02:05:29

经过几个多小时的努力,我终于注意到了一个用户的ID,这个ID对于我所播种的用户数量来说太大了,而这个ID是被截断的UUID的整数部分。

出现这些问题的原因是Duxet/RethinkDB包是如何实现的,该包在为具有自动递增ID的典型迁移构建语句时不使用Laravel实现的Blueprint方法:

代码语言:javascript
复制
use duxet\Rethinkdb\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

    public function up()
    {
        Schema::create('users', function(Blueprint $table) {
            $table->increments('id'); // Won't be an auto-incrementing unsigned integer
            ...
        });
    }

    ...
}

和种子:

代码语言:javascript
复制
use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // Developer accounts
        factory(App\User::class, 'admin', 1)->create([
            'username' => 'test',
            'email' => 'test@test.com'
        ]);
}

注意:我想指出的是,Duxet/RethinkDB包没有任何问题。当尝试在Laravel中实现它时,这只是一些需要注意的事情。

Duxet/RethinkDB使用一种简洁的方法来创建表,而不调用Laravel的API来处理向ID列分配无符号整数的方法。ReQL语句r.db('app').table('users')结果指示为ID列分配UUID,该ID列通常是Laravel自动递增的无符号整数。

代码语言:javascript
复制
{
"created_at": Fri Feb 12 2016 10:04:22 GMT+00:00 ,
"email": test@test.com, »
"id":  "8bbc1c35-6be5-4b1f-87de-75eba1c459eb" ,
"password":  "$2y$10$2f7QjuBCjEMr3R01ZNlwI.ft8v8FYs8IHRQzPI1lKdojIXtK7b9wO" ,
"role":  "admin" ,
"updated_at": Fri Feb 12 2016 10:04:22 GMT+00:00 ,
"username":  "test"
}

为了克服set增量为false,这将阻止Laravel将UUID转换为PHP整数数据类型,这将截断UUID。我提交了一个PR来对Duxet/RethinkDB包做一些修改,以防止其他人不得不自己发现这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35371050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档