Laravel 5.2.14 Duxet/RethinkDB 身份验证重定向用户在主路由中被视为访客

Laravel 5.2.14 with Duxet/RethinkDB Authentication Redirect User Seen as Guest in Home Route

使用 Laravel 5.2.14 的全新安装,添加迁移和种子文件,使用 artisan make:auth 添加身份验证脚手架,然后 运行 使用 MySQL 对此进行设置,最后登录仪表板像往常一样工作,但是当我添加 Duxet/RethinkDB;更新迁移、种子和用户模型;并尝试登录它不再重定向到/home,而是返回到/login。您可以在 Chrome 的网络选项卡中看到 /login 收到 302 错误, /home 收到 302 错误,并且它 returns 到 /login 表明 home 路由的中间件存在问题。

login   302 text/html
home    302 text/html
login   200 document

没有抛出异常或记录错误,但使用 Monolog 通过 Auth 中间件存根 (/app/Http/Middleware/Authenticate)。语句 Auth::guard($guard)->guest() 总是 returns 1 表示用户是导致重定向的访客,但它似乎通过 AuthController 的 AuthenticatesAndRegistersUsers 子特征 AuthenticatesUsers::login 对用户进行存根验证。所以在导航中点击 home 只是重定向到登录,因为 home 中间件表明用户是访客。

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 特性;试图在没有运气的情况下解决这个问题。

有没有人 运行 参与其中并且可以指出一个潜在的解决方案?

经过几个多小时尝试通过存根和削减代码来解决这个问题后,我最终注意到一个用户的 ID 对于我播种的用户数量来说太大了,结果是截断 UUID 的整数部分。

问题源于 Duxet/RethinkDB 包的实现方式,它不使用 Laravel 在为具有自动递增 ID 的典型迁移构建语句时实现的蓝图方法:

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
            ...
        });
    }

    ...
}

和种子:

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 使用简洁的方式创建 table 而无需调用 Laravel 的 API 方法,如增量,处理将无符号整数分配给 ID 列. ReQL 语句 r.db('app').table('users') 结果表明为 ID 列分配的 UUID 通常是自动递增的无符号整数 Laravel。

{
"created_at": Fri Feb 12 2016 10:04:22 GMT+00:00 ,
"email": test@test.com, »
"id":  "8bbc1c35-6be5-4b1f-87de-75eba1c459eb" ,
"password":  "yf7QjuBCjEMr3R01ZNlwI.ft8v8FYs8IHRQzPI1lKdojIXtK7b9wO" ,
"role":  "admin" ,
"updated_at": Fri Feb 12 2016 10:04:22 GMT+00:00 ,
"username":  "test"
}

为了克服设置递增为 false 的问题,这将阻止 Laravel 将 UUID 转换为 PHP 整数数据类型,从而截断 UUID。我已经提交了一份 PR 以对 Duxet/RethinkDB 包进行一些更改,以防止其他人不得不自己发现它。