Laravel - 注销特定用户

Posted

技术标签:

【中文标题】Laravel - 注销特定用户【英文标题】:Laravel - log out specific user 【发布时间】:2014-08-08 13:43:12 【问题描述】:

我知道如何登录用户,但如何从应用程序中注销指定用户?似乎没有足够的报道。

【问题讨论】:

您的意思是用户在单击用户注销按钮时从您的应用程序中注销? 不,我想从我的控制器中手动注销特定用户,例如 Auth::logout($user) 或这些行之间的内容。 【参考方案1】:

当您是管理员并想要阻止某些用户时会发生此问题。然后,当您阻止用户时,您想立即注销他。对于 laravel 5.2(可能也适用于较低版本),您可以创建 middelware:

创建中间件

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class BockedUser

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    
        $user = Auth::user();
        if ($user and $user->is_bocked) 
            Auth::logout();
            return redirect('/login');
        

        return $next($request);
    

并且在 $middlewareGroups > 'web' 部分的 app/Http/Kernel.php 中添加 \App\Http\Middleware\BockedUser::class。我认为你所有的路线都在Route::group(['middleware' => 'web'], function () .. all your routes ..

【讨论】:

还有什么比这更好的吗?【参考方案2】:

您可以在 laravel 4.2 中为特定用户注销执行此操作,并且您正在使用多重身份验证

/* for normal user logout */
 Auth::user()->logout();

 /* for admin user logout */
 Auth::admin()->logout();


/* for manager user logout */
 Auth::manager()->logout();

当你让用户授权时

【讨论】:

【参考方案3】:

当用户访问任何经过身份验证的功能时,您可以注销用户,例如编辑个人资料、编辑帖子、创建帖子等。例如:

   public function edit()
   
      if (!\Auth::user()->active)
      
        \Auth::logout();
        return redirect('/');
      
      // code here
   

【讨论】:

【参考方案4】:

使用 setUser 寻找解决方案

获取当前用户

$user = Auth::user();

您想要的注销用户

$userToLogout = User::find(5);
Auth::setUser($userToLogout);
Auth::logout();

重新设置当前用户

Auth::setUser($user);

【讨论】:

Auth::logout() 只会注销当前用户而不是特定用户。 是的,但是您必须将用户设置为当前用户 刚刚偶然发现这个答案是最正确的,但是@ImadUllah 说“再次设置当前用户”你必须使用当前用户 ID,首先获取它 @987654324 @ 然后调用Auth::loginUsingId($your_current_user->id)。这样您就不会被注销。【参考方案5】:

如果你知道他的用户ID,

//注销特定用户:

//$id == user id to to whom you want to logout
\DB::table('users')->where('id', $id)->update(['remember_token' => null]);
\DB::table('sessions')->where('user_id', $id)->delete();

//注销所有用户

$sessions = glob(storage_path("framework/sessions/*"));
foreach ($sessions as $file) 
if (is_file($file))
unlink($file);

//$id == user id to to whom you want to logout
\DB::table('users')->update(['remember_token' => null]);
\DB::table('sessions')->truncate();

如果您不使用数据库作为会话驱动程序,则无需使用会话表操作。

【讨论】:

【参考方案6】:

这就是我在中间件中的做法:

public function handle($request, Closure $next)

    if (!auth()->user()->is_approved) 
        Auth::logout();
        return redirect()->route('unauthorized');
    
    return $next($request);

只是为了添加一些上下文。

【讨论】:

以上是关于Laravel - 注销特定用户的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 中通过用户 ID 强制注销特定用户

如何从 Laravel 的特定会话中注销用户?

在 laravel 护照中注销用户

Laravel 注销不同的用户

Laravel 认证用户注销错误

如果删除状态,Laravel 强制用户注销