#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 по умолчанию.