私はSymfonyのユーザのユーザ名ではなく、ユーザのIDで自分を偽装する方法を理解できませんか?symfonyのusernameの代わりにidでユーザを偽装するには?
symfonyはユーザ名を探していると、IDと連携することができませんユーザー名と連携し、次のトリック:
?_switch_user={id}
よろしく。
PS:申し訳ありません、私の英語です。
私はSymfonyのユーザのユーザ名ではなく、ユーザのIDで自分を偽装する方法を理解できませんか?symfonyのusernameの代わりにidでユーザを偽装するには?
symfonyはユーザ名を探していると、IDと連携することができませんユーザー名と連携し、次のトリック:
?_switch_user={id}
よろしく。
PS:申し訳ありません、私の英語です。
独自のファイアウォールリスナーを実装せずに行うことは、userprovider(インターフェースにloadUserByUsername()メソッドのみを持つ)からユーザーをロードする舞台裏では不可能です。
しかし、あなた自身のファイアウォールリスナーを実装して、というコードを見てもらえます。独自の認証プロバイダの実装の詳細については、cookbook articleを参照してください。
EDIT:
一つの可能な解決策余分な要求リスナ登録されることがあります。
services:
my_listener:
class: LookupSwitchUserListener
tags:
- { name: kernel.event_subscriber }
?_switch_user_by_id=xxx
とURLを呼び出す:
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
class LookupSwitchUserListener implements EventSubscriberInterface
{
private $repository;
public function __construct(UserRepository $repository)
{
$this->repository = $repository;
}
public static function getSubscribedEvents()
{
return [
KernelEvents::REQUEST => ['lookup', 12] // before the firewall
];
}
public function lookup(GetResponseEvent $event)
{
$request = $event->getRequest();
if ($request->has('_switch_user') {
return; // do nothing if already a _switch_user param present
}
if (!$id = $request->query->has('_switch_user_by_id')) {
return; // do nothing if no _switch_user_by_id param
}
// lookup $username by $id using the repository here
$request->attributes->set('_switch_user', $username);
}
}
今すぐサービスコンテナでこのリスナーを登録しますパラメータが正しくユーザ名を検索し、SwitchUserListenerが指定されたユーザに切り替えるように設定する必要があります。
多くの多くのありがとうございます。 –
FOSユーザーの場合、別の方法がありますか? –
代わりにユーザー名を使用することをお勧めします。あなたは物事の間に "admin"コントローラを作ることができます。コントローラーはIDでユーザーを検索し、正しい '_switch_user'クエリパラメーターでリンクを表示します。 – Gerry