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

在 Laravel 中限制用户单次和多次登录

在 Laravel 中限制用户单次和多次登录

PHP
当年话下 2022-06-11 09:24:10
我是 Laravel 的初学者。我想根据用户角色限制用户会话/登录。所以我在我的登录控制器中有这个方法。我有两个角色基本的夫妻public function authenticated(Request $request, User $user){    if(Auth::check()) { //check if the user is logged in or not        $user = Auth::user();        if ($user->isBasic()) {            $previous_session = $user->session_id;            if ($previous_session) {                \Session::getHandler()->destroy($previous_session);            }            Auth::user()->session_id = \Session::getId();            Auth::user()->save();            return redirect(route('home'));        } elseif ($user->isCouple()) { //check if the user is logged in or not            $previous_session = $user->session_id;            $login = $user->no_of_logins;            if ($previous_session) {                if($login > 2) {                    \Session::getHandler()->destroy($previous_session);                    Auth::user()->no_of_logins = $user->decrement('no_of_logins');                }            }            Auth::user()->session_id = \Session::getId();            Auth::user()->no_of_logins = $user->increment('no_of_logins');            Auth::user()->save();            return redirect(route('home'));        }    }}}elseif 语句对我不起作用。我不知道该怎么做。在我的桌子上,我有这个public function up(){    Schema::create('users', function (Blueprint $table) {        $table->bigIncrements('id');        $table->string('name');        $table->string('email')->unique();        $table->enum('role', ['subscriber', 'admin', 'basic', 'couple', 'family'])->default('subscriber');        $table->timestamp('email_verified_at')->nullable();        $table->string('avatar')->nullable();        $table->integer('no_of_logins')->default(0);        $table->string('session_id')->nullable();        $table->string('password')->nullable();        $table->rememberToken();        $table->timestamps();    });}
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

我能够通过创建一个会话表来解决它


php artisan session:table


composer dump-autoload


php artisan migrate

然后在我的控制器中


public function authenticated(Request $request,User $user)

    {


        if(Auth::check())


        { //check if the user is logged in or not

            $user = Auth::user();

          //  $login = Session::where('user_id', Auth::id())->count();

          $login = DB::table('sessions')->where('user_id', Auth::id())->count();

           // dd($login);

            if ($user->isBasic()) 

            {

                if ($login > 0)

                {

                    Auth::logout();    

                    session()->flash('logout', "You are Logged in on other devices");

                    return redirect('login');

                }


                return redirect(route('welcome'));

            }


            elseif ($user->isCouple()) 

            {

                if ($login > 1)

                {

                    Auth::logout();    

                    session()->flash('logout', "You are Logged in on other devices");

                    return redirect('login');

                }


                return redirect(route('welcome'));

            }


            elseif ($user->isFamily()) 

            {

                if ($login > 5)

                {

                    Auth::logout();    

                    session()->flash('logout', "You are Logged in on other devices");

                    return redirect('login');

                }


                return redirect(route('welcome'));


                }

            }


            else 

            {

                return redirect(route('welcome'));

            }

        } 


查看完整回答
反对 回复 2022-06-11
  • 1 回答
  • 0 关注
  • 250 浏览

添加回答

举报

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