【问题标题】:Remove another user's session删除另一个用户的会话
【发布时间】:2020-03-12 10:55:33
【问题描述】:

有可能获得另一个用户会话吗?假设,有一个具有管理员权限的用户,我需要该管理员具有访问另一个用户的会话并将其删除的功能。 (这样其他用户会自动退出)。

laravel 中是否有一些工具可以解决这个问题?或者我需要做与原生 PHP 应用程序一样的事情?

【问题讨论】:

  • 只删除存储在数据库中的会话。
  • 管理员为什么要让某人登出?
  • 创建一个控制器并从数据库中获取活动会话并删除您想要的会话
  • @ vivek_23 - 如果管理员有权阻止/删除用户,则该被阻止的用户应自动注销(当然,如果他/她当前已登录)。
  • @OMiShah - 但我如何检查哪个会话属于哪个用户?

标签: php laravel session laravel-5


【解决方案1】:
  • 拥有管理面板并设置阻止用户。
  • 在数据库表中有一个列,比如is_blocked,数据类型为tinyint1 表示用户是blocked
  • 在您的应用程序中,额外检查当前登录的用户是否在定制的中间件中被阻止。如果是,请将它们注销,否则继续请求目标。

中间件片段:

<?php

namespace App\Http\Middleware;

use Closure;
use Auth;
use Session;

class IsBlockedMiddleware{
    public function handle($request, Closure $next){   
        Auth::user()->refresh();
        if(Auth::user()->blocked === 1){
            Auth::logout();
            Session::flash('error','Your account is blocked'); // show the flash message in your blade file            
            return redirect()->route('login');
        }       

        return $next($request);
    }
}

【讨论】:

  • 阻止用户与结束会话不同。
  • @meagar 但是 OP 给了我这样做的理由。
  • @meagar - 为什么不呢?如果您阻止/删除用户,那么为什么要授予他们权限,以继续将应用程序用作活动/登录用户?
  • @otar 如果这是您的用例,那么您应该澄清您的问题。有很多理由可以在不破坏其帐户或阻止未来登录的情况下结束另一个用户的会话。结束特定会话与禁用帐户不同
  • 当他们的帐户显示出泄露迹象时,例如在被盗设备或公共计算机上保持登录状态。
猜你喜欢
  • 2012-11-06
  • 1970-01-01
  • 2020-04-07
  • 2019-04-26
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-01
  • 2011-09-23
相关资源
最近更新 更多