La vérification de qui "garde" est loggedin
J'ai un multiauth laravel 5.2 application, avec la mise en jachère des gardes définie sur config/auth.php
:
...
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
'user' => [
'driver' => 'session',
'provider' => 'user',
],
...
Donc, admin
et user
.
Le problème réside dans la couche de la vue, car ces deux loggedin gardes de partager certains points de vue, ex:
Hello {{Auth::guard('admin')->user()->name}}
Dans ce cas, la garde est codé en dur dans la vue d'être toujours admin
(il donne une erreur lorsque loggedin garde est user
), mais, pour éviter d'avoir à faire un autre l'égalité de vue juste de ce petit changement, j'aimerais avoir dinamic, quelque chose comme:
Hello {{Auth::guard(<LOGGEDIN GUARD>)->user()->name}}
PS: je sais que cela pourrait être réalisé obtenir l'url correspondant à un segment, ex: www.site.com/pt/user/dasboard
qui, dans le cas où il serait le segment 2, mais de cette façon, l'application serait de perdre de l'évolutivité, car, dans l'avenir, le segment correspondant ne peut pas être le même (2 dans l'exemple ci-dessus)
getGuard()
et comment il est mis en œuvre dans Laravel est auth
zone. Pensez à qui vous va dans la bonne direction.Merci pour la réponse, malheureusement
Auth::guard($this->getGuard())
déclenche Method [getGuard] does not exist.
. Je suppose que c'est un 5.1 fonction, j'ai aussi vérifié stackoverflow.com/questions/35624561/... , avec le même résultatDroit, puisque vous n'êtes pas dans la auth classe et de la méthode est
protected
, vous ne pouvez pas utiliser $this
pour y accéder. Mais vous pourriez être en mesure d'accéder à quelque chose comme Auth::guard(Auth::getGuard())
mais je ne suis pas positif.aussi ne fonctionne pas,
...class 'Illuminate\Auth\SessionGuard' does not have a method 'getGuard'
OriginalL'auteur Miguel | 2016-08-17
Vous devez vous connecter pour publier un commentaire.
Une façon de faire cela est d'étendre la Laravel d'authentification de classe dans le conteneur IoC pour inclure, par exemple, un
name()
méthode de vérification qui garde est utilisé pour la session en cours, et les appelsuser()
sur la Garde de l'instance.Une autre façon est d'utiliser simplement un if dans votre Lame modèle:
Cependant, c'est un peu sale. Vous pouvez nettoyer un peu les à l'aide d'un partiel, ou en passant à la vue d'une variable contenant le nom de la garde, soit directement à partir de votre Contrôleur, ou par l'intermédiaire d'un ViewComposer, et ensuite de faire:
de votre point de Vue.
L'extension de Laravel d'authentification est votre meilleure option, de l'omi.
admin/user
gardeTrès vrai. C'est pourquoi l'extension de la Laravel l'authentification est la meilleure option ici.
que faire si vous êtes connecté en tant que deux?
OriginalL'auteur tomfrio
Depuis Laravel 5.5, c'est facile à faire avec les
@auth
modèle de la directive.Référence: https://laravel.com/docs/5.6/blade#if-statements
OriginalL'auteur miken32