我想在我的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();
});
}
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
我已经能够解决问题。使用'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();
}
}
}
}
只需使用Auth::logout();
代替您当前的代码:
$previous_session = $user->session_id;
if ($previous_session) {
\Session::getHandler()->destroy($previous_session);
}
[Here,您可以阅读有关Laravel身份验证程序包及其功能的更多信息。