【问题标题】:Laravel 5.6 - User not getting authenticatedLaravel 5.6 - 用户未通过身份验证
【发布时间】:2018-11-15 19:31:56
【问题描述】:

我已经找了好几天了,但是我的用户在使用 auth 中间件时从未通过身份验证。

我们不使用标准的 laravel 方式,而是使用标准的 auth 中间件来阻止对路由组的访问。 (在本例中为仪表板)

数据是正确的,因为它没有给出任何错误消息,但用户本身永远不会获得身份验证。从周三开始我就一直坚持下去,我希望你们中的任何人都能最终解决这个问题。

实际上并没有任何特定的代码,但我的(尝试)登录用户总是被定向到未经身份验证的方法。 (返回到我的另一条路线,索引)

用于登录的重要数据库列称为“用户名”和“密码”(laravel 使用的标准名称)

所以,如果有人能提供帮助,我将不胜感激!

LeerlingController 内部(登录功能所在)

public function postLogin(Request $request)
{
    $this->validate($request, [
        'username' => 'required',
        'password' => 'required'
    ]);

    if (!Auth::attempt(['username' => $request->username, 'password' => $request->password])){
        return redirect()->back()->with(['fail' => 'We konden je niet inloggen als '.$request->username]);
    }

    return redirect()->route('leerling.dashboard');
}

Leerling 模型内部(使其可验证的部分)

use Illuminate\Auth\Authenticatable;

class Leerling extends Model implements \Illuminate\Contracts\Auth\Authenticatable {
use Authenticatable;

在登录有效用户时不断发生的方法,因为没有出现失败消息 位于 App\Exceptions\Handler.php

protected function unauthenticated($request, AuthenticationException $exception)
{
    return $request->expectsJson()
        ? response()->json(['message' => $exception->getMessage()], 401)
        : redirect()->route('index');
}

受身份验证中间件保护的仪表板路由

Route::group(['middleware' => 'auth'], function () {
    Route::get('/leerling/dashboard', [
        'uses' => 'LeerlingController@getDashboard',
        'as' => 'leerling.dashboard'
    ]);

    // Don't mind this one, it's for the admin dashboard
    Route::get('/admin/dashboard', [
        'uses' => 'AdminController@getDashboard',
        'as' => 'admin.dashboard'
    ]);
});

Auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\Leerling::class,
    ],

【问题讨论】:

  • 你能在App\Exceptions\Handler.phpunauthenticated()方法中试试dd($exception->getMessage())吗?
  • @IvankaTodorova 它显示“未经身份验证”。
  • 你是如何创建用户的?您确定密码经过哈希处理(在创建和身份验证中)?
  • 你为什么不使用php artisan make:auth
  • @IvankaTodorova 用户是正确的,因为当不使用正确的信息时它会显示错误消息。

标签: php laravel eloquent laravel-5.6


【解决方案1】:

Laravel 模型默认使用 id 作为 Models 中的列名。如果您使用与id 不同的任何内容,则应使用表的主键名称设置protected 属性$primaryKey。例如:

protected $primaryKey = 'Leerling_ID';

【讨论】:

  • 非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2020-12-02
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多