2017-10-13 2 views
4

J'essaye d'authentifier un type d'utilisateur dans laravel 5.2. La route est comme ci-dessous:Laravel auth n'affiche pas le message de session

Route::group(['middleware' => ['web']], function(){ 
    Route::auth(); 
    Route::get('/user/department/login', ['as' => 'department_login', 'uses' => 'DepartmentUserAuth\[email protected]']); 
    Route::post('/user/department/login','DepartmentUserAuth\[email protected]'); 

}); 

Et le AuthController.php est

public function deptLoginPost(Request $request) 
{ 

    $this->validate($request, [ 
     'username'  => 'required', 
     'password'  => 'required', 
    ]); 
    if (auth()->guard('department_user')->attempt(['username' => $request->input('username'), 'password' => $request->input('password')])) 
    { 
     $user = auth()->guard('department_user')->user(); 
     dd($user); 
    }else{ 
     return redirect('/user/department/login')->with('message', 'Invalid credentials'); 
    } 
} 

Et le login.blade.php est:

@if(Session::has('message')) 
<div class="row"> 
    <div class="col-lg-12"> 
     <div class="alert {{ Session::get('alert-class', 'alert-info') }}"> 
       <button type="button" class="close" data-dismiss="alert">×</button> 
       {!! Session::get('message') !!} 
     </div> 
     </div> 
</div> 
@endif 

{{ dump(session()->all()) }} 

Mais le Session::has('message') est vide, et le dump montre comme ci-dessous:

array:3 [▼ 
    "_token" => "BvQ630KrUl78Ngb8d3cst6pAIqenra3ohbYbLzAP" 
    "_previous" => array:1 [▼ 
    "url" => "http://localhost:8080/material/public/user/department/login" 
    ] 
    "flash" => array:2 [▼ 
    "old" => [] 
    "new" => [] 
    ] 
] 

Comment puis-je afficher tous les messages d'erreur (comme dans le contrôleur d'authentification par défaut) dans mon login.blade.php?

+0

coller votre ' config/auth.php' code –

+0

Vous pouvez ajouter un message comme celui-ci. '$ request-> request-> add (['message' =>" Votre message custome "]);' sans mettre en session. Redirect back withInput() –

Répondre

2

Cela devrait fonctionner, pour autant que je sache (en fait, j'ai juste essayé cela dans une nouvelle installation de Laravel 5.2 et cela a fonctionné comme prévu). Ma seule supposition est, la méthode with n'écrit pas le message "définitivement" dans la session, mais dans les données flash (uniquement disponible pour le prochain cycle de demande). Si, pour une raison quelconque, vous obtenez une réponse de redirection, cette réponse utilisera les données flash et, au moment où vous atteignez à nouveau le formulaire de connexion, le message n'est plus dans la session.

Alors, faites-vous une redirection autre que celle du AuthController? Peut-être dans un intergiciel?

Certaines choses que vous pouvez essayer:

  • Ajoutez un peu de middleware qui se connecte à chaque demande (see, how to log every response in Laravel 5.2 framework) de sorte que vous pouvez suivre s'il y a des redirections supplémentaires.

  • Ajoutez session()->reflash(); à un intergiciel qui s'exécute à chaque requête. (Si cela fonctionne, cela devrait prouver que les données flash sont consommées dans une requête intermédiaire).

  • Remplacer

    return redirect('/user/department/login') 
        ->with('message', 'Invalid credentials'); 
    

    avec

    return redirect() 
        ->back()->with('message', 'Invalid credentials'); 
    
  • Remplacer (seulement temporairement, pour tester, vous pouvez lire et écrire dans la mémoire de session)

    return redirect('/user/department/login') 
        ->with('message', 'Invalid credentials'); 
    

    avec

    session(['message' => 'Invalid credentials']); 
    return redirect('/user/department/login'); 
    
3

Essayez le réglage du message directement sur le message de la demande:

$request->session()->flash('message', 'Invalid credentials');

exemple:

if (auth()->guard('department_user')->attempt(['username' => $request->input('username'), 'password' => $request->input('password')])) 
{ 
    $user = auth()->guard('department_user')->user(); 
    dd($user); 
}else{ 
    $request->session()->flash('message', 'Invalid credentials'); 
    return redirect()->back(); 
} 

Si ne marche toujours pas, regardez dans vos itinéraires et voir si votre middleware est correctement affecté.

// either as a string 
Route::group(['middleware' => 'web']... 
// or as a array element 
Route::group(['middlewareGroups' => ['web']]... 
+0

Pourquoi ce changement fait-il une différence en ce qui concerne le problème? – alepeino

1

Pour autant que je sache, les routes dans le fichier routes.php utilisent déjà le middleware web par défaut il n'y a donc pas besoin de l'envelopper de nouveau. Route::auth()Route::auth() utilise les routes d'authentification Laravel par défaut, vous avez peut-être un conflit avec celles-ci et avec celles de votre département, essayez donc de supprimer cette ligne.

Pour la dernière, je vous recommande d'utiliser session()->flash('message', 'Invalid credentials'); au lieu de ->with()

1

Aussi, en utilisant la façade Session:

//display error message 
Session::flash('message', 'Invalid credentials') 

//color the output 
Session::flash('alert-class', 'alert-danger') 

Ou, avec laracasts/flash, vous pouvez:

//AuthController 
flash('Invalid credentials')->error(); 

//login.blade.php 
@include('flash::message')