Как проверить электронную почту, не спрашивая пользователя войти в Laravel - PullRequest
0 голосов
/ 21 декабря 2018

Я занимаюсь разработкой приложения Laravel.Мое приложение использует встроенную функцию аутентификации Laravel.В аутентификации Laravel, когда пользователь регистрируется, отправляется письмо с подтверждением.Когда пользователь проверяет адрес электронной почты, нажмите на ссылку внутри него, ему необходимо снова войти в систему, чтобы подтвердить адрес электронной почты, если пользователь еще не вошел в систему.

VerificationController

class VerificationController extends Controller
{
    use VerifiesEmails, RedirectsUsersBasedOnRoles;

    /**
     * Create a new controller instance.
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth');
        $this->middleware('signed')->only('verify');
        $this->middleware('throttle:6,1')->only('verify', 'resend');
    }

    public function redirectPath()
    {
        return $this->getRedirectTo(Auth::guard()->user());
    }
}

Я попытался прокомментировать эту строку.

$this->middleware('auth');

Но она не работает и вместо этого выдает ошибку.Как я могу включить Laravel для проверки электронной почты, даже если пользователь не вошел в систему?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

он просит пользователя войти в систему, потому что redirect - это дом

, а поскольку home view auth необходимо, поэтому он просит вас войти для проверки

, еслиВы не хотите, чтобы

вам нужно было поменять redirect to на другую страницу, для которой не требуется вход в систему, например

главная страница, на которой написана страница вы были подтверждены и т. Д. На любой странице не требуется auth: D

для выполнения

, просто измените

protected $redirectTo = '/home';

на что-то вроде

protected $redirectTo = '/';

это в VerificationController, если у вас его нет, просто добавьте его: D

0 голосов
/ 15 января 2019

Сначала удалите строку $this->middleware('auth');, как вы это сделали.

Затем скопируйте метод verify из признака VerifiesEmails в свой VerificationController и немного измените его.Метод должен выглядеть следующим образом:

public function verify(Request $request)
{
    $user = User::find($request->route('id'));

    if ($user->markEmailAsVerified())
        event(new Verified($user));

    return redirect($this->redirectPath())->with('verified', true);
}

Это переопределяет метод в признаке VerifiesUsers и удаляет проверку авторизации.

Безопасность (поправьте меня, если я ошибаюсь!)

Это все еще безопасно, поскольку запрос подписан и проверен.Кто-то может проверить адрес электронной почты другого пользователя, если он каким-то образом получит доступ к электронному письму с подтверждением, но в 99% случаев это вряд ли риск.

...