2016-11-10 4 views
-3

Я использую стандартную аутентификацию Laravel.Как проверить адрес электронной почты (подтвержденный или нет) при входе в laravel 5.2?

php artisan make:auth 

Но мне нужно проверить статус электронной почты пользователя (подтверждено/не подтверждено). Если это не подтверждено, на странице входа будет отображаться ошибка.

Laravel 5,2

Спасибо!

+0

Поле в базе данных - подтвердить (1/0). Я понимаю, что нужно искать Middleware, но я не понимаю, как сделать эту проверку. –

+1

Посмотрите на [это] (https://blog.damirmiladinov.com/laravel/laravel-5.2-email-verification-with-activation-code.html#.WCPkZB8xA8o). Это для 'L5.2', но он должен работать и для' L5.3'. – linuxartisan

+0

Дорогой ОП, поскольку вы отметили ответ как приемлемый, не могли бы вы объяснить, почему вы это сделали. Если вы смогли адаптировать код в ответе, делитесь своим завершенным решением, чтобы другие посетители могли найти это полезным. Спасибо. –

ответ

0

Сделайте столбец is_verified и другую колонку verification_hash в таблице users. В AuthController.php

protected function create(array $data) 
    { 
    return User::create([ 
     'name' => $data['name'], 
     'username' => $data['username'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'verification_hash' => md5($data['name'] . Carbon::now()->timestamp), 
     'is_verified' => 0, 
    ]); 
    } 

переопределения register способа отправить его по почте с ссылкой для подтверждения

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

    if ($validator->fails()) { 
     $this->throwValidationException(
      $request, $validator 
     ); 
    } 

    $user = $this->create($request->all()); 
    Auth::guard($this->getGuard())->login($user); 

    // Send verification email 
    // use $user->verification_hash to generate link 
    return redirect($this->redirectPath()); 
} 

Теперь эта ссылка проверки должна выглядеть, как показано ниже, как он содержит хэш специфичного для данного пользователя

http://your_domain.com/auth/verify/6d533b7664483d3cadd13c23477e4f12 

по этому методу связи, измените is_verified на 1 для этого пользователя.

Теперь измените метод validator как этого

protected function validator(array $data) 
{ 
    return Validator::make($data, [ 
     'name' => 'required|max:255', 
     'username' => 'required|max:255|unique:users', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|min:6|confirmed', 
     'is_verified'=>'in:1' 
    ]); 
} 

Это позволит только тем пользователям, для входа, которые имеют is_verified значения как 1.

Надежда это помогает.

+0

Как это принято? Код не имеет смысла ... Это не будет лишать вас логина, если не проверено, и какова точка '' is_verified '=>' in: 1' в validator? Mail send, is_verified update, is_verified check, custom exception exception throw, все не реализованы ... –

+0

Я предполагаю, что этот код обрезается с какого-то стороннего плагина проверки Laravel. –

+0

Чувак, успокойтесь. Этот код разработан для меня специально для этой конкретной проблемы. вы всегда можете изменить код в соответствии с вашими потребностями, если у вас возникли проблемы. –

Смежные вопросы