允许 is_request 1 的用户不登录

我目前正在开发一个人们可以提交注册请求的系统。管理员需要接受请求才能使用户能够登录。在我的数据库中,我有一个名为的字段is_request,每次注册时,该字段默认设置为 1(在database) ,意思是。当此字段设置为 1 的用户尝试登录时,需要通知他们其帐户尚未激活。我怎样才能做到这一点?


当用户尝试注册时,会发生以下情况:


protected function create(array $data)

    {

        $users = User::where('role_id', 1)->get();


        $user = User::create([

            'firstname' => $data['firstname'],

            'lastname' => $data['lastname'],

            'email' => $data['email'],

            'role_id' => 3,

            'activated' => 0,

            'user_token' => Str::random(32),

            'password' => Hash::make($data['password']),

        ]);


        foreach($users as $admin) {

            $admin->notify(new registerRequest($user));

        }


        Mail::to($user->email)->send(new RegisterRequestSend($user));


        return $user;

    }

当后端管理员“接受”请求时,该字段is_request将设置为 0,并且用户需要能够登录应用程序。


登录控制器看起来像这样


class LoginController extends Controller

{

    /*

    |--------------------------------------------------------------------------

    | Login Controller

    |--------------------------------------------------------------------------

    |

    | This controller handles authenticating users for the application and

    | redirecting them to your home screen. The controller uses a trait

    | to conveniently provide its functionality to your applications.

    |

    */


    use AuthenticatesUsers;


    /**

     * Where to redirect users after login.

     *

     * @var string

     */

    protected $redirectTo = RouteServiceProvider::HOME;


    /**

     * Create a new controller instance.

     *

     * @return void

     */

    public function __construct()

    {

        $this->middleware('guest')->except('logout');

    }

}


Helenr
浏览 82回答 2
2回答

尚方宝剑之说

您可以创建一个全局中间件来检查用户是否被接受:namespace App\Http\Middleware;use Closure;class CheckIfAccepted{    /**     * Handle an incoming request.     *     * @param  \Illuminate\Http\Request  $request     * @param  \Closure  $next     * @return mixed     */    public function handle($request, Closure $next)    {        if (auth()->check() && !auth()->user()->isAccepted) {            auth()->logout();            return redirect('not-accepted');        }        return $next($request);    }}此中间件将注销任何未被接受的经过身份验证的用户,并将他们重定向到您选择的路线。更改auth()->user()->isAccepted为包含有关已接受状态信息的属性或方法。如果您希望中间件在每个请求时运行,您可以通过将其添加到$middleware-array in 中,将其添加为全局中间件app/Http/Kernel.php。您可以在文档中阅读有关中间件以及如何创建它们的更多信息: https ://laravel.com/docs/master/middleware

喵喵时光机

首先,您必须让管理员在收到通知时更新用户的属性User::where('id' , $user_id)->update(['is_request' => 0]);然后将其添加到您的登录控制器中public function credentials(Request $request)    {        $credentials = $request->only($this->username(), 'password');        $credentials = array_add($credentials, 'is_request', 0);        return $credentials;    }
打开App,查看更多内容
随时随地看视频慕课网APP