36

私はマルチ認証laravel 5.2アプリを持っています.fallowingガードが定義されていconfig/auth.phpます:

...
'admin' => [
    'driver' => 'session',
    'provider' => 'admin',
],
'user' => [
    'driver' => 'session',
    'provider' => 'user',
],
...

だから、adminそしてuser

この 2 人のログインした警備員がいくつかのビューを共有しているため、問題はビュー レイヤーにあります。

Hello {{Auth::guard('admin')->user()->name}}

この場合、ガードは常にビューにハードコードされていますadmin(ログインしたガードが の場合にエラーが発生しますuser) が、この小さな変更のためだけに別の同等のビューを実行する必要がないように、次のような動的なものにしたいと思います。

Hello {{Auth::guard(<LOGGEDIN GUARD>)->user()->name}}

PS: これは、対応する URL セグメントを取得することで実現できることはわかっています。たとえば、www.site.com/pt/user/dasboardこの場合はセグメント 2 になりますが、この方法ではアプリのスケーラビリティが失われます。将来、対応するセグメントが同じでなくなる可能性があるためです (2上記の例では)

4

8 に答える 8

10

これにより、現在ログインしているユーザーに使用されるガード名が取得されます

Auth::getDefaultDriver()

ログインすると、デフォルトで次のものが取得されます。

'web'

あなたがログインしているガードを通じて信頼できるものは、そのガード名を取得します。

これは API には適用されません!!! laravel の API はデフォルトでセッションを使用しないためです。

于 2019-10-31T08:14:19.880 に答える
1

usingauth()->guard($guard)->getName()は 2 つの異なるタイプの値を返します

login_admin_59ba36addc2b2f9401580f014c7f58ea4e30989d

管理者ガードの場合

login_web_59ba36addc2b2f9401580f014c7f58ea4e30989d

場合はウェブガード、またはユースケースによってはユーザーガードです。したがって、それに対してテストできます。

したがって、単純なユースケースは以下のようになります

 if(str_contains(auth()->guard($guard)->getName(), 'admin')){
      dd('is admin');
   }

ここで管理者の場合は表示'is admin'されます。それ以外の場合はデフォルトを取得します

于 2021-02-11T12:58:38.527 に答える