【发布时间】:2019-02-04 23:08:14
【问题描述】:
这可能是关于为什么 auth:attempt 总是返回错误的一个反复出现的问题,但是尽管寻找答案,但我无法进一步解决我的问题。
我有一个学生表,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]);
}
}
此时我没有得到任何答案,为什么尝试方法失败,因为我已确保登录信息正确?你能看看我是否遗漏了什么吗?
谢谢!
【问题讨论】:
-
你试过
Auth::attempt(['std_email' => $request['std_email'], 'std_password' => $request['std_password']]吗?并确保您在$request中获得了价值 -
首先你使用
password而不是你的数据库列std_password -
@LeenaPatel,我不这么认为,但请查看我的答案。
标签: php laravel laravel-5 laravel-5.5