Php mpt成功并在重定向之前:\Auth::logoutOtherDevices(请求(“密码”)

Php mpt成功并在重定向之前:\Auth::logoutOtherDevices(请求(“密码”),php,security,authentication,laravel,Php,Security,Authentication,Laravel,演示 以下是您如何实现这一目标的方法。首先,您需要从app/Http/Kernel.php文件中的$middlewareGroups属性中取消注释行\illumb\Session\Middleware\AuthenticateSession::class,因为这是管理Laravel中用户会话的中间件 2-在登录尝试成功之后和重定向之前,在登录函数中添加此行:\Auth::logoutOtherDevices(请求(“密码”) 演示 我猜您是否将“检查会话是否有效”部分放在身份验证筛选器中?谢谢

演示

以下是您如何实现这一目标的方法。首先,您需要从app/Http/Kernel.php文件中的$middlewareGroups属性中取消注释行\illumb\Session\Middleware\AuthenticateSession::class,因为这是管理Laravel中用户会话的中间件

2-在登录尝试成功之后和重定向之前,在登录函数中添加此行:\Auth::logoutOtherDevices(请求(“密码”)

演示

我猜您是否将“检查会话是否有效”部分放在身份验证筛选器中?谢谢,我在Auth驱动程序中弄糊涂了,但这要简单得多。@JosephSzymborski是的。有时候你只需要朝正确的方向推一下。实际上,我创建了一个新类来检查会话是否有效。每次用户访问一组需要登录该类的路由/筛选器时,都会调用。在Laravel 4中,可以通过这种方式获取Laravel会话id。对于Laravel 3($_COOKIE[“Laravel_会话”])和Laravel>=4.1(会话::getId()),还有另一种方法。@AlbinN的积分我使用的是Laravel 3,我把条件放在哪里?在所有控制器中?还是别的地方?请帮忙?@TanvirAlam我从未使用过Laravel3,但你可以将条件放入身份验证过滤器中。(您需要检查每个请求的会话)我猜您是否将“检查会话是否有效”部分放在身份验证筛选器中?谢谢,我在Auth驱动程序中弄糊涂了,但这要简单得多。@JosephSzymborski是的。有时候你只需要朝正确的方向推一下。实际上,我创建了一个新类来检查会话是否有效。每次用户访问一组需要登录该类的路由/筛选器时,都会调用。在Laravel 4中,可以通过这种方式获取Laravel会话id。对于Laravel 3($_COOKIE[“Laravel_会话”])和Laravel>=4.1(会话::getId()),还有另一种方法。@AlbinN的积分我使用的是Laravel 3,我把条件放在哪里?在所有控制器中?还是别的地方?请帮忙?@TanvirAlam我从未使用过Laravel3,但你可以将条件放入身份验证过滤器中。(您需要检查每个请求的会话)
$user->last_session = session_id();
$user->save();
if(session_id() != Auth::user()->last_session){
   Auth::logout();
   return true;
}
protected $fillable = [
    'name', 'email', 'password','last_session'
];
protected function authenticated()
{
    // Update last_session after logged-in
    User::find(Auth::id())->update(['last_session'=>Session::getId()]);
}
if(Auth::check())
{
   // If current session id is not same with last_session column
   if(Auth::user()->last_session != Session::getId())
   {
      // do logout
      Auth::logout();

      // Redirecto login page
     return Redirect::to('login');
   }
}
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\SingleSession::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];
protected function authenticated()
{
    \Auth::logoutOtherDevices(request('password'));
}
\Illuminate\Session\Middleware\AuthenticateSession::class,
php artisan make:middleware CheckSingleSession
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Auth;
public function handle($request, Closure $next)
{

    $previous_session = Auth::User()->session_id;
    if ($previous_session !== Session::getId()) {

        Session::getHandler()->destroy($previous_session);

        $request->session()->regenerate();
        Auth::user()->session_id = Session::getId();

        Auth::user()->save();
    }
    return $next($request);
}
Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('firstName');
    $table->string('lastName');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->string('session_id')->nullable();
    $table->rememberToken();
    $table->timestamps();
});
'checksinglesession' => \App\Http\Middleware\CheckSingleSession::class,
Route::group(['middleware' => ['auth' ,'checksinglesession'], 'prefix' => 'app'], function () {
    Route::get('/dashboard', 'DashboardController@index')->name('dashboard.index');
});
use Illuminate\Support\Facades\Auth;
Auth::logoutOtherDevices($password);

   if(Auth::guard('student')->attempt([],$request->rememberme))
    {

        Auth::guard('student')->logoutOtherDevices(request('password'));

        return redirect()->intended('/');  //route('homepage');
    }