Laravel застрял на электронной почте / подтвердить - PullRequest
0 голосов
/ 09 марта 2020

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

Я добавил следующий код:

class User extends Authenticatable implements MustVerifyEmail
...
Auth::routes(['verify' => true]);
...
Route::get('management', function () {
    // Only verified users may enter...
})->middleware('verified');

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

Но я обнаружил еще один случай:
Если пользователь регистрируется и не проверяет свою почту, он всегда получит перенаправлен на электронную почту / подтвердить.

Например, если случайно введя неправильный адрес электронной почты, он даже не может посетить страницу регистрации, потому что даже на mypage.com/register он перенаправляется на mypage.com / email / проверять!

Это сделано специально Laravel? Я что-то пропустил? Нужно ли / возможно ли исключить страницы входа / регистрации из проверки?

Заранее спасибо

1 Ответ

1 голос
/ 09 марта 2020

У меня есть эта проблема раньше, у меня есть этот способ решить, что, если вы хотите настроить его, вы можете рассмотреть этот способ.

В LoginController.php вы можете добавить это немного кода, я перезаписываю метод входа по умолчанию:

public function login(Request $request)
{
    $this->validateLogin($request);
    $user = User::where($this->username(), $request->{$this->username()})->first();

    // If the class is using the ThrottlesLogins trait, we can automatically throttle
    // the login attempts for this application. We'll key this by the username and
    // the IP address of the client making these requests into this application.
    if (method_exists($this, 'hasTooManyLoginAttempts') &&
        $this->hasTooManyLoginAttempts($request)) {
        $this->fireLockoutEvent($request);

        return $this->sendLockoutResponse($request);
    }

    if ($user->hasVerifiedEmail()) {
        if ($this->attemptLogin($request)) {
            return $this->sendLoginResponse($request);
        }
    })

    // If the login attempt was unsuccessful we will increment the number of attempts
    // to login and redirect the user back to the login form. Of course, when this
    // user surpasses their maximum number of attempts they will get locked out.
    $this->incrementLoginAttempts($request);

    return $this->sendFailedLoginResponse($request);
}

Вы также можете перезаписать и добавить новый параметр в sendFailedLoginResponse, чтобы метод знал, когда перенаправлять на страницу электронной почты / проверки, или просто добавить еще в $user->hasVerifiedEmail(), если заблокировать в перенаправить его на электронную почту / подтвердить страницу

РЕДАКТИРОВАТЬ:

Вы можете удалить $this->middleware('guest') в LoginController и RegisterController, чтобы войти в систему пользователь может go, чтобы зарегистрироваться и войти страницы, но это будет странно, если кто-то уже вошел в систему, может войти или зарегистрироваться снова.

...