所以我設法解決這個問題。
我的設置是所有的子域得到了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