Laravel 6.2身份验证支架-无法正常工作,但不会引发/记录错误

时间:2019-11-28 21:52:02

标签: vue.js authentication routes laravel-6.2

问题

我已将Auth支架添加到现有项目中。

    php artisan ui vue --auth

据我了解,身份验证应该是开箱即用的,没有任何先决条件。
视图/ URL工作正常,但是注册过程和登录过程均不起作用。
如果未通过身份验证,则 my-domain.com/home 会将我重定向到 my-domain.com/login

通常会按预期引发其他问题的通知,警告和异常。
但是在这个特定问题(注册/登录)上,我没有出现错误。
因此,我在这里迷失了自己,为获得任何帮助感到高兴。

TIA

用例

我将填写表格,并将其重定向到同一页面。
(例如,my-domain.com / register会将我重定向到my-domain.com/register)。
另外,也不会在用户表中插入新用户,并且在登录过程中读取也会失败。

到目前为止我尝试过的事情

权限似乎不是问题,因为脚本可以像这样创建用户:

    $user = new \App\User;

    $user->name = 'Simon the Sorcrerer';
    $user->email = 'sorcerersimon@gme.co';
    $user->password = Hash::make('expelliarmus');
    $user->role_id = 'user';

    $user->save();

这些链接在我看来似乎已经过时了。 但是-值得一提的是,我没有更改Controller或与默认值相关的其他任何内容。

2017 - Auth should work out of the box
2013 - Laravel - Auth not working. super weird

我尝试过

     Auth::routes();
     Route::get('/home', 'HomeController@index')->name('home');

     Auth::routes(['register' => true]);
     Route::get('/home', 'HomeController@index')->name('home');

     Auth::routes(['register' => true, 'verify' =>false]);
     Route::get('/home', 'HomeController@index')->name('home');

两者都没有改变当前的行为。

1 个答案:

答案 0 :(得分:0)

TL; DR:负载均衡器/ CDN后面的内容混合,并且查询中缺少role_id

如果您在负载平衡的环境中设置Laravel,则https会话会在到达Web服务器之前终止,因此Laravel为http请求提供服务,从而产生了混合内容问题。 因此,不会导入实际脚本,并且应用程序本身不会引发任何错误。

因此,您需要确保通过安全连接(https)提供导入的脚本和终结点。

(通过在浏览器的控制台中检查应用,您将看到混合内容错误。)

解决到不安全端点的路由

在以下位置编辑路由:

app/Providers/AppServiceProvider.php

来自

public function boot()
{
    ...
} 

public function boot()
{
   // if (!\App::environment('local')) {
   \URL::forceScheme('https');
   // } 
} 

如果您想区分服务器上的本地环境和生产环境,则注释部分反映了Mladen Janjetovic's approach。 但是,在本地进行尽可能接近模拟生产环境的测试是一种好习惯。

可选:解决脚本导入(CSS和JS)的混合内容

您要确保从安全来源(https)调用脚本。
编辑您的资产调用:

resources/views/layouts/app.blade.php

来自

asset( ... )

secure_asset( ... )

在创建用户时解决缺少的默认值

解决混合内容后,您可能会发现 User :: create 查询失败。如果发生这种情况,您可能需要进行以下更改。

在以下位置编辑用户模型:

app/User.php

来自

protected $fillable = [
    'name', 'email', 'password',
];

protected $fillable = [
    'name', 'email', 'password', 'role_id'
];

在以下位置编辑查询:

app/Http/Controllers/Auth/RegisterController.php

来自

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'role_id' => $data['role_id'] ?? 'user' 
    ]);
}