如何在laravel应用程序中不为用户使用电子邮件

时间:2017-11-11 02:47:22

标签: php laravel laravel-5

我正在为我的俱乐部建立一个会员数据库应用程序。我正在使用Laravel 5构建此解决方案。

我有标准的身份验证设置和包含大多数成员数据的配置文件表。所有成员都是已分析的,但不一定是活跃用户。

我想要做的是用激活取代注册。创建用户和配置文件,默认情况下禁用,除非管理员授予成员登录的权限。这样,尝试将配置文件附加到新用户就更简单了。

授予后,用户将通过提供其个人资料数据中的一些值来激活其用户访问权限,以验证他们的身份。从那里,他们更改密码,可以看到他们的个人资料。

我的问题是如何在此实例中用激活替换注册?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以通过各种方式实现此活动

  1. 您可以在用户表中维护一个属性,无论他是否被激活,因此即使他在浏览网站时登录,如果用户未被激活,他将显示有限的内容和等待激活的通知< / LI>
  2. 如果您不希望在未激活的情况下向我显示任何内容,则可以在LoginController中覆盖经过身份验证的函数并强制注销,并在等待激活时显示错误消息
  3. 例如

    <?php
    
    namespace App\Http\Controllers\Auth;
    
    use App\Http\Controllers\Controller;
    use Illuminate\Foundation\Auth\AuthenticatesUsers;
    use Illuminate\Http\Request;
    
    class LoginController extends Controller
    {
    
        use AuthenticatesUsers;
    ...
    
        /**
         * The user has been authenticated.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  mixed  $user
         * @return mixed
         */
        protected function authenticated(Request $request, $user)
        {
            if (!$user->activated) {
                \Auth::logout();
                return redirect()->route('login')->with('error', 'Awaiting activation');
            }
        }
    }
    

    详细了解身份验证 - https://laravel.com/docs/5.5/authentication#authenticating-users

    如果您想要采用第一种方式,为了进一步保护它,您可以创建一个中间件并让它为每条路径调用,以确保用户不会使用URL来获取不必要的访问权。

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    use Illuminate\Support\Facades\Auth;
    
    class ActivatedUser
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            $user = Auth::user();
            if (!$user->activated) {
                Auth::logout();
                return redirect()->route('login')->with('error', 'Awaiting activation');
            }
            return $next($request);
        }
    }
    

    详细了解中间件 - https://laravel.com/docs/5.5/middleware