gpt4 book ai didi

php - 扩展 Laravel 5.2 SessionGuard

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:34:54 24 4
gpt4 key购买 nike

我想扩展 Laravel stock 身份验证以使用 OAuth 服务器进行用户检索和身份验证,同时利用现有功能。我已经设法扩展 EloquentUserProvider 以部分覆盖/扩展 Illuminate\Contracts\Auth\UserProvider 合约的实现。当前的实现如下所示:

class EloquentOauthServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return HcOAuthProvider;
*/
public function boot()
{
Auth::provider('oauth',function($app){
$model = $app['config']['auth.providers.oauth.model'];
$repository = new OauthUserRepository();
return new EloquentOauthUserProvider($app['hash'], $model, $repository);
});
}

}

auth.php 配置中,我更改了这样的描述符:

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'oauth',
],
]

'providers' => [
'oauth' => [
'driver' => 'oauth',
'model' => App\Models\User::class,
],
]

到目前为止这是有效的,我可以覆盖方法来添加我的逻辑。但是我意识到我还需要覆盖 SessionGuard 类的一些方法(具体来说是 loginlogout),因为我想保存和使用 Laravel session 实现检索 OAuth 特定 token 。周围有一些建议,但它们要么不起作用(也许它们在 Laravel 5.2 之前起作用),要么需要覆盖看起来有点矫枉过正的 Authmanager

所以我的问题是:我必须在 Laravel 5.2 中做什么才能覆盖 SessionGuard?

最佳答案

最近我遇到了同样的问题,所以也许解决方案是这样的。

<?php
namespace App\CoreExtensions;
use Illuminate\Auth\SessionGuard;
use Illuminate\Contracts\Auth\Authenticatable;
class SessionGuardExtended extends SessionGuard
{
/**
* Log a user into the application.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param bool $remember
* @return void
*/
public function login(Authenticatable $user, $remember = false)
{
$this->updateSession($user->getAuthIdentifier());
if ($remember) {
$this->refreshRememberToken($user);
$this->queueRecallerCookie($user);
}
$this->fireLoginEvent($user, $remember);
$this->setUser($user);
}
}

在 AppServiceProvider.php 中

public function boot()
{
Auth::extend(
'sessionExtended',
function ($app) {
$provider = new EloquentUserProvider($app['hash'], config('auth.providers.users.model'));
return new SessionGuardExtended('sessionExtended', $provider, app()->make('session.store'), request());
}
);
}

Config/auth.php 中的驱动应该重命名

'web' => [
'driver' => 'sessionExtended',
'provider' => 'users',
],

关于php - 扩展 Laravel 5.2 SessionGuard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36087061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com