如果电子邮件未验证,如何限制 Laravel 中的用户登录

San*_*etR 3 php email-verification laravel

我在 Laravel 中使用“jrean”包来验证注册用户的电子邮件。 https://packagist.org/packages/jrean/laravel-user-verification

我目前面临的问题是,即使用户已注册,我如何限制他的访问,直到电子邮件未被验证。我已经按照包教程中给出的所有步骤来实现注册。但是他们没有列出任何限制登录访问的步骤。有任何想法吗?

Jul*_*uez 5

您可以覆盖您的登录方法。在 L5.2 中,假设您的 users 表中有一个经过验证的字段,它是布尔值,您可以执行以下操作:

在您的 app/Http/Controllers/Auth/AuthController.php 中添加如下内容:

use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Support\Facades\Auth;

    /**
       * Handle a login request to the application.
       *
       * @param  \Illuminate\Http\Request  $request
       * @return \Illuminate\Http\Response
       */
      public function login(Request $request)
      {
        $this->validateLogin($request);
        $throttles = $this->isUsingThrottlesLoginsTrait();
        if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
          $this->fireLockoutEvent($request);
          return $this->sendLockoutResponse($request);
        }
        $credentials = $this->getCredentials($request);
        if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
          if (Auth::user()->verified == true) { // This is the most important part for you
            return $this->handleUserWasAuthenticated($request, $throttles);
          } else {
            Auth::logout();
            return $this->sendFailedLoginResponse($request, "Some message here");
          }
        }
        if ($throttles && !$lockedOut) {
          $this->incrementLoginAttempts($request);
        }
        return $this->sendFailedLoginResponse($request);
      }
Run Code Online (Sandbox Code Playgroud)

您还需要在 User eloquent 模型中添加已验证的字段,以便在修改后的登录方法中使用它。

希望能帮助到你!