尝试从管理系统注销特定用户:Laravel 5.2.37

时间:2016-08-05 20:25:33

标签: php laravel laravel-5 laravel-5.1 laravel-5.2

我正在编写以下代码以从Admin System注销特定用户。

我有会话表。 enter image description hereI am following this link

$User = $this->Get($obj);
$UserSession = SessionModel::where('user_id', $obj->UserID)->first();
if($UserSession != null) {
    $UserSession->user_id = null;
    $UserSession->payload = null;
    $UserSession->save();
}

这样做是否正确?

3 个答案:

答案 0 :(得分:6)

你可以用一行代码清理它:

$deleted = SessionModel::whereUserId($obj->UserID)->delete();

// Returns the number of deleted sessions.
return $deleted;

删除属于用户的所有会话记录将使用户退出他们拥有的所有会话。

例如,如果用户在手机和计算机上登录您的应用程序,则会在两台设备上注销。

答案 1 :(得分:4)

$User = $this->Get($obj);
$UserSession = SessionModel::where('user_id', $obj->UserID)->first();
if($UserSession != null) {
    $UserSession->user_id = null;
    $UserSession->payload = null;
    $UserSession->save();
}

您必须注意到,如果用户使用许多不同的浏览器登录,则用户可以拥有更多会话记录 =>解决方案:获取会话表中给定user_id的所有行并删除它们。使用有用的Collection方法

    $User = $this->Get($obj);
    // Get Collection Object
    $UserSessions = SessionModel::where('user_id', $obj->UserID)->get();
    if($UserSession != null) {
        // Use each method on Collection Object
        $UserSessions->each(function($UserSession){
              $UserSession->delete();      
        });
    }

答案 2 :(得分:-1)

您可能会认为会话表中的 user_id 应该可以为空,并且默认为空值,因为未登录的用户没有用户ID。然后您的迁移可能会有这一行。

$table->integer('user_id')->unsigned()->nullable()->default(null);

然后删除此表中特定用户的行将删除该用户会话。

相关问题