Пользовательская функция имени авторизации — Laravel

#laravel

#laravel

Вопрос:

У меня настроено приложение Lumen с несколькими авторизациями, одно для бизнеса, другое для обычного пользователя. Когда я аутентифицируюсь как бизнес, я хочу сказать:

auth()-> business()->id

Вместо:

auth()-> user()->id

Ответ №1:

Создайте новый класс

 <?php
namespace IlluminateSupportFacades;

use IlluminateSupportFacadesAuth;

class CustomAuth extends Auth
{
    public static function company()
    {
        return $this->user()->business;
    //I'm not shure, but some like that
    }
}
  

и изменения в вашем config/app.php

    'aliases' => [
        'App' => IlluminateSupportFacadesApp::class,
        'Artisan' => IlluminateSupportFacadesArtisan::class,
        //'Auth' => IlluminateSupportFacadesAuth::class,
        'Auth' => IlluminateSupportFacadesCustomAuth::class,
  

вы можете прочитать больше в laracast.

Ответ №2:

Если вы используете защиту «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',
        ],

        // ...
    ],
  

Теперь ваша защита по умолчанию должна быть вашей пользовательской.

Комментарии:

1. Использование Lumen с аутентификацией на основе токена JWT. Нет сеанса.

2. Вероятно, вы могли бы использовать аналогичный подход для расширения защиты токена JWT по умолчанию.