播种者创建的用户可以登录,注册用户不能登录

时间:2020-10-28 16:37:33

标签: php laravel vue.js

我的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创建的用户可以通过登录表单登录,但是在使用注册表单后尝试登录的用户会收到电子邮件/密码组合错误。

1 个答案:

答案 0 :(得分:0)

首先,我将检查前端输入的密码是否到达控制器。 => check $request->password 您也可以在php artisan tinker控制台中尝试bcrypt('passwordUsedInFrontend')并检查是否与数据库中的相同。 似乎是调试工作。