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 - 注销特定用户的主要内容,如果未能解决你的问题,请参考以下文章