自定义身份验证名称函数-Laravel

自定义身份验证名称函数-Laravel,laravel,Laravel,我有多个认证流明应用程序设置,一个用于业务,一个用于典型用户。当我被认证为企业时,我想说: auth()->business()->id 而不是: auth()->user()->id创建一个新类 如果您使用的是“web”防护,那么它将使用SessionGuard类作为防护。您可以将其扩展如下: class MySessionGuard extends SessionGuard { private function isAuthenticatedAsBusiness($us

我有多个认证流明应用程序设置,一个用于业务,一个用于典型用户。当我被认证为企业时,我想说:

auth()->business()->id

而不是:

auth()->user()->id

创建一个新类

如果您使用的是“web”防护,那么它将使用
SessionGuard
类作为防护。您可以将其扩展如下:

class MySessionGuard extends SessionGuard {
    

     private function isAuthenticatedAsBusiness($user) {
         // do your check here
        return false; // or true accordingly
 
   
    public function user() {
         $user = parent::user();
         return !$this->isAuthenticatedAsBusiness($user) ? $user : null;
    }

    public function business() {
         $user = parent::user();
         return $this->isAuthenticatedAsBusiness($user) ? $user : null;
    }
}
然后在您的
AuthServiceProvider
中注册此防护:

public function boot() {
   Auth::extend("myweb", function ($app,$name, array $config) {
       $guard = new MySessionGuard(
            $name, 
            Auth::createUserProvider($config['provider']),
            $app["session.store"],
            $app["request"]
        );
        // This is copied from https://github.com/laravel/framework/blob/43bea00fd27c76c01fd009e46725a54885f4d2a5/src/Illuminate/Auth/AuthManager.php#L121
        if (method_exists($guard, 'setDispatcher')) {
            $guard->setDispatcher($this->app['events']);
        }
        if (method_exists($guard, 'setCookieJar')) {
            $guard->setCookieJar($this->app['cookie']);
        }
        return $guard;
   });

   // ...


然后可以更新
config/auth.php

'guards' => [
        'web' => [
            'driver' => 'myweb',
            'provider' => 'users',
        ],

        // ...
    ],

您的默认防护现在应该是自定义防护。

使用Lumen和基于JWT令牌的身份验证。没有会话。您可能可以使用类似的方法来扩展默认的JWT令牌保护。