我的Laravel / Vue应用程序具有一个UserSeeder,可以在php artisan migrate:refresh --seed
命令期间生成多个管理员用户。
/**
* Seed users table
*/
public function run()
{
DB::table('users')->insert([
'firstname' => 'Admin',
'lastname' => 'User',
'email' => 'admin@user.com',
'role' => 1,
'password' => bcrypt('admin')
]);
}
允许访客通过Vue注册页面进行注册。提交注册后,使用以下代码将用户详细信息正确存储到数据库中,而不会出现任何错误:
/**
* Register a new user
*/
public function register(Request $request)
{
$v = Validator::make($request->all(), [
'firstname' => 'required|min:3',
'lastname' => 'required|min:3',
'email' => 'required|email|unique:users',
'password' => 'required|min:3|confirmed',
]);
if ($v->fails()) {
return response()->json([
'status' => 'error',
'errors' => $v->errors()
], 422);
}
$user = new User();
$user->firstname = $request->firstname;
$user->lastname = $request->lastname;
$user->email = $request->email;
$user->password = bcrypt($request->password);
$user->role = 2;
$user->save();
return response()->json(['status' => 'success'], 200);
}
注册后,用户应该能够立即登录(无需进一步确认其帐户已激活)。类似于注册页面,登录页面位于Vue中,在提交登录表单后,使用以下代码使用用户的电子邮件和密码对用户进行身份验证:
/**
* Login user and return a token
*/
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
if ($token = $this->guard()->attempt($credentials)) {
return response()->json(['status' => 'success'], 200)->header('Authorization', $token);
} else {
return response()->json([
'status' => 'error',
'errors' => [
'combination' => 'combination'
]
], 422);
}
return response()->json(['error' => 'login_error'], 401);
}
/**
* Return auth guard
*/
private function guard()
{
return Auth::guard();
}
奇怪的是,由UserSeeder创建的用户可以通过登录表单登录,但是在使用注册表单后尝试登录的用户会收到电子邮件/密码组合错误。
答案 0 :(得分:0)
首先,我将检查前端输入的密码是否到达控制器。
=> check $request->password
您也可以在php artisan tinker控制台中尝试bcrypt('passwordUsedInFrontend')
并检查是否与数据库中的相同。
似乎是调试工作。