所以我设法解决这个问题。
我的设置是所有的子域得到了user
后卫,主域名有admin
后卫。
我意识到Auth::getName()
包括护卫员的名字,当我使用不同的卫兵登录时,我最终在一个会话中有两次活动登录。但是这些登录名有不同的名称,只有在右边的警卫才有效。这个警卫在主域和子域中不同,导致在域和子域之间没有真正共享登录状态。
我设法通过覆盖默认laravel SessionGuard
并加入我自己的驱动程序,像这样以解决此问题:
在config/auth.php
:
'guards' => [
'user' => [
'driver' => 'extended_session',
'provider' => 'users',
],
'admin' => [
'driver' => 'extended_session',
'provider' => 'admins',
],
]
在AppServiceProvider.php
\Auth::extend('extended_session', function ($app, $name, $config) {
$providerConfig = $this->app['config']['auth.providers.'.$config['provider']];
// If you don't use eloquent you need to alter the next line accordingly
$provider = new EloquentUserProvider($app['hash'], $providerConfig['model']);
return new SessionGuardExtended('extended_session', $provider, $this->app['session.store']);
});
并添加一个新的类名为SessionGuardExtended
像这样:
use Illuminate\Auth\SessionGuard;
class SessionGuardExtended extends SessionGuard{}
这会导致共享会话具有与域和子域相同的身份验证名称。
来源
2017-09-06 14:12:46
Oli
这可能会导致你在某处:https://laracasts.com/discuss/channels/general-discussion/multi-domain-session – Quezler
在这里回复https://stackoverflow.com/questions/26463467/laravel-maintain-a -session-in-sub-domain-of-different-server – aaron0207
@Quezler看起来与我的问题类似。会尝试。 thx – Oli