为了账号安全,请及时绑定邮箱和手机立即绑定

允许 is_request 1 的用户不登录

允许 is_request 1 的用户不登录

PHP
Helenr 2022-07-22 16:52:26
我目前正在开发一个人们可以提交注册请求的系统。管理员需要接受请求才能使用户能够登录。在我的数据库中,我有一个名为的字段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');    }}
查看完整描述

2 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

您可以创建一个全局中间件来检查用户是否被接受:


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


查看完整回答
反对 回复 2022-07-22
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

首先,您必须让管理员在收到通知时更新用户的属性


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;

    }


查看完整回答
反对 回复 2022-07-22
  • 2 回答
  • 0 关注
  • 81 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信