Laravel 5 Auth::attempt() 总是返回 false

Posted

技术标签:

【中文标题】Laravel 5 Auth::attempt() 总是返回 false【英文标题】:Laravel 5 Auth::attempt() always returns false 【发布时间】:2015-12-10 08:08:27 【问题描述】:

我是 laravel 的新手,我被困在身份验证中。我不知道这段代码有什么问题,有人可以帮我解决这个问题吗?我已经在 *** 中阅读了很多答案,但到目前为止没有一个有效。

我编写了一个简单的代码来测试Auth::attempt()。我遵循的大多数教程都是使用这个简单的代码。在 Auth 工作之前我还需要配置其他东西吗?为什么这么复杂?

附: 我还测试了它是否生成了正确的哈希值,看起来没问题。

控制器:

public function index()


    $user = new User;
    $user->email = 'q21@q.com';
    $user->password = Hash::make('123456');
    $user->save();
    $userData = array('email' => 'q21@q.com', 'password' => '123456');            

    var_dump(Auth::attempt($userData));


型号:

<?php namespace App;

use Illuminate\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Auth\Passwords\CanResetPassword;
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;

class User extends Model implements AuthenticatableContract, CanResetPasswordContract 

use Authenticatable, CanResetPassword;

protected $table = 'users';

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

protected $hidden = ['password', 'remember_token'];

更新... 下面是我的用户表迁移脚本。

我有一个单独的管理员和用户登录名,这可能是导致问题的原因。它可能没有查看正确的表,因为管理员身份验证有效。如何显示 Auth 中使用的 SQL?

用户表迁移脚本

Schema::create('users', function(Blueprint $table)
    
        $table->increments('id');
        $table->string('firstname');
        $table->string('lastname');
        $table->string('email')->unique();
        $table->string('password');
        $table->timestamps();
    );

路线:

Route::group(['prefix' => 'api'], function()


    Route::post('user/login','UserController@login');

    Route::group(['middleware' => ['jwt.auth','jwt.refresh']], function()
    
        Route::resource('user','UserController');
    );
);


Route::group(['prefix' => 'admin'], function()


Route::get('/', 'AdminController@index');
Route::get('login', 'AdminController@postlogin');
Route::post('login', 'AdminController@postlogin');

Route::get('logout', function()
    Auth::logout();
    return Redirect::to('admin');
);

Route::group(['middleware' => ['auth']], function()

    Route::resource('messages', 'MessageController');
);

);

【问题讨论】:

为什么要在注册表中使用Auth::attempt 您的迁移是什么样的? @aldrin27 因为我想在注册后自动登录用户。 如果您想自动登录用户,请不要使用身份验证尝试。只需在您的仪表板页面中重定向他。 @aldrin27 感谢您帮助我。我发现了问题。我通过在构造函数中添加 Config::set('auth.model', 'App\AdminUser'); 覆盖了 Auth 数据库配置。现在它使用的是 AdminUser 模型而不是 User 模型。 【参考方案1】:

我怀疑您没有正确设置数据库。

为了使 Eloquent ORM 工作,它必须有一个数据库。相关配置应该在 config/database.php ,然后你应该检查这个表是否存在。另一方面,如果您不希望连接到 config/database.php 中的默认数据库,则您可能没有在 Eloquent 中正确设置连接

小问题,还要确保您的 config/auth.php 正确执行。 auth.php 应该在默认设置下与您的代码一起使用。

【讨论】:

我已经检查了身份验证配置和数据库设置,它工作正常。我认为管理员和普通用户登录存在冲突。

以上是关于Laravel 5 Auth::attempt() 总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Auth::attempt 在 Laravel 5.3 中总是返回 false?

Auth::attempt 在 Laravel 5 中不起作用

Laravel Auth::attempt() 返回 false

Laravel 5.1 注册后 Auth::attempt no access to the user data on another page

Laravel 4 - Auth::attempt() 不工作

Laravel Auth::attempt 会话过期