这可能是一个反复出现的问题,为什么auth:attempt总是返回false,但是尽管寻找答案,但我无法进一步解决问题。
我有一个学生表,其ID为std_id,电子邮件为std_email,密码为std_password。为了克服默认的密码字段,我经历了一些答案,并建议使用此功能覆盖字段名称
public function getAuthPassword() {
return $this->std_password;
}
尝试功能为
public function authenticate(Request $request)
{
if (Auth::attempt(['std_email' => $request['std_email'], 'password' => $request['std_password']])){
return response()->json([
'validated' => true
]);
}else{
return response()->json([
'validated' => false
]);
}
}
所以,我已经更新了两个文件auth / LoginController.php
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use \Illuminate\Support\Facades\Auth;
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 authenticate(Request $request)
{
if (Auth::attempt(['std_email' => $request['std_email'], 'password' => $request['std_password']])){
return response()->json([
'validated' => true
]);
}else{
return response()->json([
'validated' => false
]);
}
}
}
,用户模型为
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
protected $primaryKey = "std_id";
protected $table = "students";
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'std_email', 'std_password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
//'std_password', 'remember_token',
];
public function getAuthPassword() {
return $this->std_password;
}
}
我确保在用户模式下,将主键设置为std_id,将表设置为学生。
此外,当我注册学生时,我使用bcrypt哈希密码并将其保存在数据库中。
public function create(Request $request){
$account_exists = $this->check_account_exists($request['email']);
if($account_exists){
return response()->json(['account'=>true]);
}else{
DB::table('students')->insert([
'std_fname' => $request['first_name'],
'std_lname' => $request['last_name'],
'std_email' => $request['email'],
'std_password' => bcrypt($request['std_password']),
'group_id' => $request['group'],
'std_isActive' => 1
]);
return response()->json(['created'=>true]);
}
}
在这一点上,我没有得到任何尝试方法失败的答案,因为我已经确定登录信息正确?你能看到我是否想念其他东西吗?
谢谢!
答案 0 :(得分:0)
使用Hash :: make($ request ['std_password'])加密密码,也请从auth.php共享您的代码
答案 1 :(得分:0)
我尝试了不同的方法,但均无效果。但是,我发现了一个非常有趣的发现。也许我以前不知道这一点。存储密码时,我设置了第一个密码(该auth :: attempt方法始终返回false)包括至少1个大写字母和1个特殊字符,并且PW为“ Abcde12!”。每次都失败。 接下来,我添加了一个没有这些规则的简单密码,并以“秘密”的形式保存在数据库中。当我测试登录名时,它返回true。 因此,现在真正的问题是,为什么对带有特殊字符的密码进行哈希运算不起作用?
答案 2 :(得分:-1)
看起来好像是您要传入
'password' => $request['std_password']
到
Auth::attempt()
当数据库表中不包含“密码”列时的方法。您可能想传递
'std_password' => $request['std_password']
但即使如此,我仍不确定
Auth::attempt()
在将密码输入与数据库中的“ std_password”哈希进行比较之前,将知道对密码输入进行哈希处理。您可能会找到一种修改方法
Auth::attempt()
或创建一个新的try方法,该方法将在比较之前对输入进行哈希处理...或者您可以使用
bcrypt()
在将“ std_password”输入传递给尝试之前对其进行哈希处理。