【问题标题】:how to completely logout in laravel 5.5 controller?如何在 laravel 5.5 控制器中完全注销?
【发布时间】:2018-04-29 01:03:32
【问题描述】:

在我注销我的 laravel 应用程序后,在浏览器中我按下按钮向后(返回),然后我看到仪表板。

如果我回去,我想消除这个 laravel mantein 的“会话”。

谁能帮帮我?

编辑:我有两个登录文件,一个在 Controllers/Auth 内部,另一个在 Controller/.我确信这不是一个好的做法,但它可以让我的系统保持正常运行。如何解决?

控制器/Auth/LoginController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Session;


class LoginController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */

    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/';

    /**
     * Create a new controller instance.
     *
     * @return void
     */

    private $user;

}

我的登录控制器/LoginController.php ->

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Session;


class LoginController extends Controller
{
    private $user;


    public function logout(){
        Auth::logout();
        \Session::flash('success',"logout");
        return redirect()->route('login');
    }

}

我的仪表板控制器 ->

use App\Authorization;
use App\BackLog;
use App\Key;
use App\isKeyInUse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Redirect;

class DashboardController extends Controller
{

    public function index() {

        return view('dashboard');
    }


}

我的 web.php ->

<?php

Route::get('/', 'LoginController@login')->name('login');
Route::get('auth/logout', 'Auth\LoginController@logout')->name('logout');

Route::get('/dashboard', 'DashboardController@index')->name('dashboard')->middleware('auth');
Route::post('/dashboard/getKey', 'DashboardController@getKey')->name('dashboard.key')->middleware('auth');

【问题讨论】:

  • 显示您的仪表板控制器

标签: php laravel authentication laravel-5


【解决方案1】:

您在注销功能中缺少请求

    public function logout(Request $request){
        Auth::logout();
        \Session::flash('success',"logout");
        return redirect()->route('login');
    }

并写入您的仪表板控制器

public function __construct() 
{
    $this->middleware('auth');
}

【讨论】:

  • 现在显示您的注销文件和仪表板控制器屏幕截图
  • imgur.com/3b52Voh我没有注销文件,我只在我的登录文件中使用了注销功能
  • 同时显示您的文件,其中写入了注销功能
【解决方案2】:

发生这种情况是因为缓存。为了防止我们可以创建一个middleware 来拦截每个请求并将cache 设置为在0 时间过期,因此当用户按下后退按钮时它将强制页面重新加载这里是创建中间件的步骤:

第一

创建一个中间件,我称之为MyAuth

php artisan make:middleware MyAuth

app/Http/kernel.php注册中间件

 protected $routeMiddleware = [
      ...,
      'my_auth' => \App\Http\Middleware\MyAuth::class,
   ];

第三

在新创建的中间件app/Http/Middleware/MyAuth.php

public function handle($request, Closure $next, $guard = null)
    {
         $response =  $next($request);   
         return $response
                ->withHeaders([
                    'Cache-Control' => 'no-store, no-cache, must-revalidate',
                    'Pragma'=> 'no-cache',
                    'Expires' => '0'
                ]);
        }
  }

那么

你可以像这样添加你的中间件:

Route::group(['middleware' => 'my_auth'], function() {
  
  // All your routes you want to be secure

});

此代码来源于此video

【讨论】:

  • 我喜欢你的建议,但是缓存控制中间件的名称MyAuth 有点混乱。你可能想调整它。
  • 谢谢你的朋友,正因为如此我才喜欢stackoverflow
  • @Namoshek 我完全同意。
【解决方案3】:

将这些行插入您的仪表板控制器,然后检查:

public function __contruct() 
{
    $this->middleware('auth');
}

这将检查用户是否登录?如果用户已注销,则它会发送到您在 auth 中间件中定义的特定登录页面。

【讨论】:

  • 你能分享你的仪表板控制器和路由文件吗?
  • 我分享了我的仪表板和路线
【解决方案4】:

按浏览器的后退按钮将加载之前加载的文档。它只是可见的,但肯定不会起作用。为此,您只需要覆盖来自 javascript 的后按事件。

见链接How to Detect Browser Back Button event - Cross Browser

【讨论】:

    【解决方案5】:

    在 Laravel 7.x 中,您可以使用以下命令从控制器注销:

    Auth::logout()
    

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 2018-03-16
      • 2018-05-17
      • 2015-10-02
      • 2018-08-09
      • 1970-01-01
      • 1970-01-01
      • 2019-03-31
      相关资源
      最近更新 更多