@Ilya78rus

Duplicate entry 'test@test.com' for key 'users_email_unique'?

Laravel 5.5 + AjaxRegister При регистрации пользователей иногда натыкаюсь на такую ошибку в логах:

at /var/www/game2/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664, PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'test@test.com' for key 'users_email_unique' at /var/www/game/vendor/laravel/framework/src/Illuminate/Database/Connection.php:458)


По словам пользователей при регистрации их кидает на белый экран и все. При обновлении страницы они зарегистрированы, но данная ситуация отпугивает много народу. Повторюсь, проблема возникает через раз.

Код RegisterController:
use RegistersUsers;

protected $redirectTo = '/';

public function __construct()
{
    $this->middleware('guest');
}

protected function validator(array $data)
{
    $data['email'] = $data['email_reg'];
    $data['password'] = $data['password_reg'];
    $vaild = Validator::make($data, [
        'name' => 'required|max:255|unique:users',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6|confirmed',
    ]);

    if ($vaild->fails()) {
        return json_encode($vaild->errors());
    }

    return true;
}

public function register(Request $request)
{
    $v = $this->validator($request->all());

    if (! is_bool($v)) {
        return $v;
    }

    event(new Registered($user = $this->create($request->all())));

    $this->guard()->login($user);

    return $this->registered($request, $user)
        ?: redirect($this->redirectPath());
}

protected function create(array $data)
{
    $data['email'] = $data['email_reg'];
    $data['password'] = $data['password_reg'];

    $avatar = Avatars::inRandomOrder()->first();

    $referred_by = Cookie::get('referral');
    $come_url = NULL;
    if(null !== Cookie::get('come_url')){
        $come_url = Cookie::get('come_url');
    }

     return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'come_url' => $come_url,
            'last_login' => Carbon::now(),
            'avatar' => $avatar->img,
            'uniq' => md5($data['email'].$data['name'])
        ]);
}

protected function registered(Request $request, $user)
{
    return "true";
}
  • Вопрос задан
  • 395 просмотров
Пригласить эксперта
Ответы на вопрос 2
ubernoob
@ubernoob
Где-то зашит тестовый e-mail или e-mail по умолчанию test@test.com когда не проходит какая-то проверка или он не указан то он подставляется. Но в БД он уже есть и на это поле стоит уникальный индекс что бы не было 2 одинаковых е-майл адресов.
Выход тупой: убрать уникальный индекс с поля.
Выход нормальный: искать по проекту поиском test@test.com и смотреть откуда он берётся
Ответ написан
Tesla
@Tesla
public function register(Request $request)
{
    $v = $this->validator($request->all());

Кто-то не читает документацию? FormRequest

return $this->registered($request, $user)
        ?: redirect($this->redirectPath());

Экшн RegisterController@register как вообще вызывается? Ajax или обычный запрос? А то есть подозрение, что пользователи видят белый экран с надписью "true"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы