Laravel 5.2 - Utilisation Auth::check() ne fonctionne pas dans le MIddleware
Je suis en train de faire un middleware pour différents types d'utilisateurs dans mon Laravel 5.2 application.
Alors, qu'est-ce que je suis en train de faire est de faire des différents middlewares pour les différents utilisateurs.
Autant que je suis sachant Auth::check() ne fonctionnera pas sans la rêverie middleware web de ici.
Donc, ce que j'ai fait est-
routes.php
Route::group(['middleware' => ['web','admin']], function ()
{
//suspend, activate, delete
Route::get('users', [
'uses' => 'AdminController@users',
'as' => 'users'
]);
//Edit,activate,suspend, delete
Route::get('articles', [
'uses' => 'AdminController@articles',
'as' => 'articles'
]);
});
AdminMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check())
{
return "asd";
//return Auth::user();
//return redirect('home');
}
else
{
return redirect('login');
}
//now return the valid request
return $next($request);
}
}
Kernel.php
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'admin' => \App\Http\Middleware\AdminMiddleware::class,
'user' => \App\Http\Middleware\UserMiddleware::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
];
AdminController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class AdminController extends Controller
{
public function users()
{
return view('admin.users');
}
public function articles()
{
return view('admin.articles');
}
}
Mais j'obtiens cette erreur-
lorsque "retour Auth::user();" appelée à l'intérieur d'un middleware, "retour Auth::user();" est de travailler dans un autre endroit (de vue et de contrôleurs), mais ne fonctionne pas comme les anciennes versions de Laravel.
Quelqu'un peut s'il vous plaît aider?
- pourquoi essayez-vous de retourner le modèle de l'utilisateur à partir d'un middleware ?
- En fait, je veux savoir le type d'utilisateur dans mon middleware afin que je puisse décider quoi que ce soit à faire avec ça, alors que pour le test je suis en train de tout reprendre.
- juste
dd
ce que vous voulez vérifier, ne pas les retourner. Qu'essayez-vous de vérifier l '"utilisateur" modèle ? - user_type utilisateur modèle
- En fait le problème n'est pas ce que je suis de retour, problème est que je ne suis pas autorisé à le faire Auth::check()
- vous pouvez et de de ses se fait dans d'autres middlewares
- Commentaire VerifyCsrfToken ligne Kernel.php et vérifier.
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire quelque chose comme cela, ajuster en cas de besoin
L'erreur que vous recevez provient du fait que vous n'êtes pas de retour d'un
Response
objet de votre middleware. LeVerifyCsrfToken
middleware est d'essayer d'ajouter un cookie à la réponse qu'il obtient à partir de transmettre la demande dans le pipeline. Dans ce cas, il n'est pas d'obtenir unResponse
objet, mais plutôt une chaîne de caractères ouUser
car une chaîne ouUser
était retourné dans votre middleware.Vous avez ajouté les routes en groupe web ainsi donc, assurez-vous que votre fichier noyau doit avoir la suite middleware groupe.
L'erreur due à la session. assurez-vous que votre fichier noyau contient session middlewares.
Salut @Cowboy et @lagbox ,
Merci d'essayer de l'aider, malheureusement, ils n'ont pas de travail, mais je l'ai résolu.
J'ai résolu en exécutant-
et puis middleware-
Et Route-
J'ai le même problème. Dans mon cas, je suis confronté à ce dans de Multiples authentification. Si vous utilisez Plusieurs authentifications ou même d'authentification unique avec différentes clé primaire dans la table au lieu de
id
, Cela peut entraîner.Dans Laravel, la valeur par défaut de la clé primaire pour la table des utilisateurs est
id
. En cas, vous avez changé que dansuser_id
ou quelque chose, Vous devez mentionner que dans la votre Modèle. Si non, Laravel ne peut pas créer de la session de l'utilisateur comme un résultat, leAuth::attempt()
fera du bon travail, maisAuth::check()
ne sera pas. Donc, assurez-vous que vous avez mentionné qu'à l'intérieur de la classe du modèle.