2017-10-13 2 views
4

Ich versuche, einen Benutzertyp in Laravel 5.2 zu authentifizieren. Die Strecke ist wie folgt:Laravel Auth nicht Sitzung Nachricht anzeigen

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]'); 

}); 

Und die AuthController.php ist

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'); 
    } 
} 

Und die login.blade.php ist:

@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()) }} 

Aber die Session::has('message') ist leer, und die dump zeigt, wie unten:

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

Wie kann ich alle Fehlermeldungen (wie im Standard-Auth-Controller) in meinem login.blade.php anzeigen?

+0

fügen Sie Ihre ' config/auth.php' code –

+0

Sie können eine Nachricht wie folgt hinzufügen. '$ request-> request-> addiere (['message' =>" Deine custome Nachricht "]);' ohne Sitzung. Redirect zurück mit Input() –

Antwort

2

Das sollte funktionieren, soweit ich das beurteilen kann (tatsächlich habe ich das gerade in einer neuen Laravel 5.2-Installation versucht und es hat wie erwartet funktioniert). Meine einzige Vermutung ist, die with Methode schreibt nicht die Nachricht "permanent" in der Sitzung, sondern in den Flash-Daten (nur für den nächsten Anfragezyklus verfügbar). Wenn Sie aus irgendeinem Grund eine Umleitungsantwort erhalten, wird diese Antwort die Flash-Daten verbrauchen. Wenn Sie das Anmeldeformular erneut erreichen, befindet sich die Nachricht nicht mehr in der Sitzung.

Also, machst du eine andere Umleitung als die in der AuthController? Vielleicht in einer Middleware?

Einige Dinge, die Sie könnten versuchen:

  • einige Middleware hinzufügen, die jede Anfrage (see, how to log every response in Laravel 5.2 framework), so können Sie Trace-Protokolle, ob es weitere Umleitungen sind.

  • Fügen Sie session()->reflash(); zu einer Middleware hinzu, die bei jeder Anforderung ausgeführt wird. (Wenn dies funktioniert, sollte dies beweisen, dass die Flash-Daten in einer Zwischenanforderung verbraucht werden).

  • ersetzen

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

    mit

    return redirect() 
        ->back()->with('message', 'Invalid credentials'); 
    
  • ersetzen (nur vorübergehend, die Sie testen können aus dem Session-Speicher schreiben und lesen)

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

    mit

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

versuchen, die Nachricht direkt auf die Anfrage des Nachrichteneinstellung:

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

Beispiel:

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(); 
} 

Wenn immer noch nicht hilft, schau dir in die Wege und sehen, ob Ihre Middleware ist ordnungsgemäß zugewiesen.

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

Warum macht diese Änderung einen Unterschied in Bezug auf das Problem? – alepeino

1

Soweit ich weiß, Routen in routes.php Datei verwenden bereits die web Middleware standardmäßig so dass keine Notwendigkeit, es ist da wieder zu wickeln.

Das Route::auth() verwendet die Standard-Authoring-Routen von Laravel, möglicherweise haben Sie einen Konflikt mit ihnen und Ihre Abteilung anmelden, also versuchen Sie, diese Zeile zu entfernen.

Für Last, empfehle ich session()->flash('message', 'Invalid credentials'); zu verwenden, anstatt ->with()

1

Auch mit der Session Fassade:

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

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

Oder mit laracasts/flash, man konnte:

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

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