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