laravel - Laravel 身份验证登录不断给出“这些凭据与我们的记录不匹配”。
问题描述
我已经设置了 laravel 并使用了它的默认身份验证控制器,但我修改了表名和它的表结构,因此我也更改了 RegisterController 和 LoginController。RegisterController 工作正常并注册了一个新用户,但是当我尝试使用登录表单登录时,它会给出相同的验证错误“这些凭据与我们的记录不匹配”。
我附上了以下文件:LoginController、RegisterController、Admin(Model)、Config->auth
我已经根据我的 EmailAddress 字段覆盖了用户名字段。
管理模型
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
class admin extends Authenticatable
{
use Notifiable;
public $table = 'admin';
public $timestamps = false;
protected $primaryKey = 'AdminId';
protected $fillable = ['FirstName', 'LastName', 'FirstName_ar','LastName_ar','EmailAddress','Password','IsActive','remember_token'];
protected $hidden = ['Password', 'remember_token'];
public function getAuthPassword()
{
return $this->Password;
}
}
登录控制器
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Auth;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function username()
{
return 'EmailAddress';
}
public function getRememberTokenName()
{
return "remember_token";
}
}
注册控制器
<?php
namespace App\Http\Controllers\Auth;
use App\admin;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Validator;
use Illuminate\Foundation\Auth\RegistersUsers;
class RegisterController extends Controller
{
/*
|--------------------------------------------------------------------------
| Register Controller
|--------------------------------------------------------------------------
|
| This controller handles the registration of new users as well as their
| validation and creation. By default this controller uses a trait to
| provide this functionality without requiring any additional code.
|
*/
use RegistersUsers;
/**
* Where to redirect users after registration.
*
* @var string
*/
protected $redirectTo = '/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest');
}
/**
* Get a validator for an incoming registration request.
*
* @param array $data
* @return \Illuminate\Contracts\Validation\Validator
*/
protected function validator(array $data)
{
return Validator::make($data, [
'firstname' => 'required|string|max:255',
'lastname' => 'required|string|max:255',
'firstname_ar' => 'required|string|max:255',
'lastname_ar' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'password' => 'required|string|min:6|confirmed',
]);
}
/**
* Create a new user instance after a valid registration.
*
* @param array $data
* @return \App\User
*/
protected function create(array $data)
{
return admin::create([
'FirstName' => $data['firstname'],
'LastName' => $data['lastname'],
'FirstName_ar' => $data['firstname_ar'],
'LastName_ar' => $data['lastname_ar'],
'EmailAddress' => $data['email'],
'Password' => bcrypt($data['password']),
'IsActive' => 1,
'remember_token' => str_random(10)
]);
}
public function getRememberTokenName()
{
return $this->remember_token;
}
}
配置->auth.php
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'admin',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'admin',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
// 'users' => [
// 'driver' => 'eloquent',
// 'model' => App\User::class,
// ],
'admin' => [
'driver' => 'eloquent',
'model' => App\admin::class,
],
],
'passwords' => [
// 'users' => [
// 'provider' => 'users',
// 'table' => 'password_resets',
// 'expire' => 60,
// ],
'admin' => [
'provider' => 'admin',
'table' => 'password_resets',
'expire' => 60,
],
],
];
解决方案
在RegisterController
, 在create
方法中, 而不是
'password' => bcrypt($data['password'])
, 这样做
'password' => Hash::make($data['password'])
可能是为什么您的错误发生了,因为可能在您注册时使用bcrypt
哈希方法作为密码,但是当您登录时,它使用的是不同的哈希方法。确保导入类
use Illuminate\Support\Facades\Hash;
在RegisterController
文件的顶部。这里要注意的另一件事是确保在数据库中插入新用户记录时,确保默认小写电子邮件,并且在登录时,确保也小写电子邮件。某些数据库默认区分大小写。所以你可能有问题。就像您在数据库中有一封电子邮件,Admin@example.com,并且在登录时,您提供了 admin@example.com,在这种情况下它将不匹配。希望这可以帮助。
推荐阅读
- javascript - 计算二维数组中的出现次数并将自定义公式结果放在数组末尾
- shell - 分配和存储文件总行数的变量,以在 shell & awk 脚本中的下一个命令中使用
- javascript - React useState hook - setState 导致多次重新渲染
- python - 从 CSV 对多个地址进行地理编码
- javascript - 如何让一个部分粘几秒钟然后一直粘
- facebook - 使用 Graph API ( v 7.0 ) 访问私人 facebook 群组的帖子
- regex - 获取结果字符串正则表达式
- python - 不能在 sqlite3 中使用 2 位数字
- orm - 无法使用 sequelize cli 创建 ENUM 类型属性
- angular - 预加载模块不适用于 Angular Universal