登录数在Laravel中不起作用

问题描述 投票:1回答:2

我想在我的Laravel应用程序中将登录数限制为2。因此,我在控制器中执行了此操作,但是它对我不起作用。

 public function authenticated(Request $request,User $user){
        if(Auth::check()){ //check if the user is logged in or not
            $user = Auth::user();

            if ($user->isCouple()) {
                $previous_session = $user->session_id;
                $login = $user->no_of_logins->count() > 2;

                if (($previous_session) && $login )
                {
                 \Session::getHandler()->destroy($previous_session);
                  Auth::user()->no_of_logins--;
                 } }

                 Auth::user()->session_id = \Session::getId();
                 Auth::user()->no_of_logins++;
                 Auth::user()->save();
                 return redirect(route('home'));
                 }  } }

在我的user模型中,我有一个方法iscouple

public function isCouple()
{
    return $this->role=='couple';
}

在我的User Table中,我有这个

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();
    });
}

UPDATE

我已经将控制器更新为此
public function authenticated(Request $request,User $user)
        {
            if(Auth::check())
            { 
                $user = Auth::user();
                if ($user->isCouple()) 
                {
                   $previous_session = $user->session_id;
                   $login = $user->no_of_logins;
                   if ($login > 2){
                        if ($previous_session)
                            {
                            \Session::getHandler()->destroy($previous_session);
                            Auth::user()->no_of_logins--;
                            }
                    }
                   Auth::user()->session_id = \Session::getId();
                   Auth::user()->no_of_logins++;
                   Auth::user()->save();
                   return redirect(route('home'));
                }  
            } 
        }

没有返回错误,但是我希望在登录之前检查if ($login > 2)。但是我尝试登录多个设备,并且它不断登录,并且no_of_logins不断增加。我希望能够在no_of_logins = 2

时阻止登录
php laravel
2个回答
0
投票

我已经能够解决问题。使用'Auth :: logout();`为我解决。

public function authenticated(Request $request,User $user)
    {
        if(Auth::check())
        { 
            $user = Auth::user();
            if ($user->isCouple()) 
                {
                    $login = $user->no_of_logins;
                    if ($login > 2)
                        {
                             Auth::logout();
                        }
                }
        }
    }

0
投票

只需使用Auth::logout();代替您当前的代码:

$previous_session = $user->session_id;

if ($previous_session) {
    \Session::getHandler()->destroy($previous_session);
}

[Here,您可以阅读有关Laravel身份验证程序包及其功能的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.