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

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

【问题讨论】:

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

标签: authentication laravel logout


【解决方案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);
        }
        

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

        【讨论】:

          猜你喜欢
          • 2016-08-22
          • 2016-08-14
          • 1970-01-01
          • 2016-02-13
          • 2017-05-17
          • 2019-11-13
          • 2017-11-08
          • 1970-01-01
          • 2015-06-23
          相关资源
          最近更新 更多