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

允许具有is_request 1 的用户不登录

允许具有is_request 1 的用户不登录

PHP
慕斯709654 2022-08-05 16:03:03
我目前正在开发一个人们可以提交注册请求的系统。管理员需要接受请求才能使用户能够登录。在我的数据库中,我有一个名为“字段”,每次注册时,此字段默认设置为1(在数据库中默认设置为1),表示是。当此字段设置为 1 的用户尝试登录时,需要通知他们其帐户尚未激活。我该如何做到这一点?is_request当用户尝试注册时,会发生以下情况: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;    }当后端的管理员“接受”请求时,该字段将设置为0,用户需要能够登录到应用程序。is_request登录控制器如下所示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贡献1829条经验 获得超6个赞

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


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


如果希望中间件在每次请求时都运行,则可以将其添加为全局中间件,方法是将其添加到 中的 -array 中。$middlewareapp/Http/Kernel.php


您可以在文档中阅读有关中间件以及如何创建中间件的更多信息:https://laravel.com/docs/master/middleware


查看完整回答
反对 回复 2022-08-05
?
MM们

TA贡献1886条经验 获得超2个赞

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


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-08-05
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

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