2016-06-04 4 views
0

Erstens, sorry für mein schlechtes EnglischDie angeforderte Token und die Sitzung Token sind nicht gleichen

ich ein neues Projekt über diesen Befehl erstellt haben:

laravel new blog 

Dann habe ich make:auth lief innerhalb des Blog-Projekts.

localhost: 8000/login

Alles funktioniert gut und ich kann ohne Probleme in den Blog anmelden mit dieser Adresse

Dann habe ich versucht, auf den Blog anmelden!

Ich habe auch die Benutzertabelle erstellt und einige Benutzer hinzugefügt!

Das Problem:

Das Problem beginnt, wenn ich dieses sehr einfaches Projekt auf dem Host bereitstellen. Wenn dieses Projekt auf dem Host bereitgestellt wird und versucht, in sie einzuloggen, wird es mir:

TokenMismatchException in VerifyCsrfToken.php line 67: 

Es ist komisch, weil es auf localhost funktioniert aber nicht auf Host!

Was ich bisher versucht:

Ich habe versucht, um herauszufinden, wo der Benutzer aufgefordert Token auf der Sitzung mit dem Token eines Vergleich. Ich fand heraus, dass es eine Methode tokensMatch in der folgenden Datei genannt ist:

/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php 

ich diese Methode diese Änderung:

protected function tokensMatch($request) 
    { 
     $sessionToken = $request->session()->token(); 

     $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN'); 
     $myArray = [  // I added this line 
      'SessionToken' => $sessionToken, 
      'RequetedToken' => $token, 
     ]; 
     var_dump($myArray); // I added this line 
     die();    // I added this line 
     if (! $token && $header = $request->header('X-XSRF-TOKEN')) { 
      $token = $this->encrypter->decrypt($header); 
     } 

     if (! is_string($sessionToken) || ! is_string($token)) { 
      return false; 
     } 

     return hash_equals($sessionToken, $token); 
    } 

Also, dann habe ich versucht, in den lokalen Host anmelden und der Ausgang war dies:

Array 
(
    [sessionToken] => YhfaZMkbEPwWdYmT4D1kyZeysEhFnltROvMgvRQh 
    [RequestedToken] => YhfaZMkbEPwWdYmT4D1kyZeysEhFnltROvMgvRQh 
) 

Es zeigt, dass der angeforderte Token und das Sitzungstoken gleich sind und ich mich erfolgreich anmelden kann.

Aber dann versuche ich auf dem Host anzumelden, war der Ausgang dieses:

Array 
(
    [sessionToken] => GSXeJSwD1mVSQ5XwgbLjnIk3VfhT5GzsiijfE15e 
    [RequestedToken] => Nd540vhx5BDidQb2FwudHWRzkK65IIhjgEBcf9ur 
) 

Wie Sie das angeforderte Token und die Session-Token diferent sind zu sehen! also kann ich mich nicht einloggen und es kommt mir der schreckliche TokenMismatchException Fehler!

Es macht keinen Sinn für mich! Ich habe keine Idee warum!

hilft Alle geschätzten großen

UPDATE wäre:

Hier meine auth/login.blade.php Datei conttent ist:

@extends('layouts.app') 
    @section('content') 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-8 col-md-offset-2"> 
       <div class="panel panel-default"> 
        <div class="panel-heading">Login</div> 
        <div class="panel-body"> 
         <form class="form-horizontal" role="form" method="POST" action="{{ url('/login') }}"> 
          {{ csrf_field() }} 

          <div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}"> 
           <label class="col-md-4 control-label">E-Mail Address</label> 

           <div class="col-md-6"> 
            <input type="email" class="form-control" name="email" value="{{ old('email') }}"> 

            @if ($errors->has('email')) 
             <span class="help-block"> 
              <strong>{{ $errors->first('email') }}</strong> 
             </span> 
            @endif 
           </div> 
          </div> 

          <div class="form-group{{ $errors->has('password') ? ' has-error' : '' }}"> 
           <label class="col-md-4 control-label">Password</label> 

           <div class="col-md-6"> 
            <input type="password" class="form-control" name="password"> 

            @if ($errors->has('password')) 
             <span class="help-block"> 
              <strong>{{ $errors->first('password') }}</strong> 
             </span> 
            @endif 
           </div> 
          </div> 

          <div class="form-group"> 
           <div class="col-md-6 col-md-offset-4"> 
            <div class="checkbox"> 
             <label> 
              <input type="checkbox" name="remember"> Remember Me 
             </label> 
            </div> 
           </div> 
          </div> 

          <div class="form-group"> 
           <div class="col-md-6 col-md-offset-4"> 
            <button type="submit" class="btn btn-primary"> 
             <i class="fa fa-btn fa-sign-in"></i>Login 
            </button> 

            <a class="btn btn-link" href="{{ url('/password/reset') }}">Forgot Your Password?</a> 
           </div> 
          </div> 
         </form> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
    @endsection 

Antwort

0

Es ist sehr wahrscheinlich, weil Sie das Formular nicht öffnen, den richtigen Weg (bitte teilen Sie das HTML), was dazu führt, dass kein Token gesendet wird.

Laravel Form

{!! Form::open(array('url' => 'foo/bar')) !!} 
// 
{!! Form::close() !!} 

Die CSRF-Token zu einem Formular Laravel Hinzufügen bietet eine einfache Methode von Schutz Ihrer Anwendung von Cross-Site Request Fälschungen verwenden. Zuerst wird ein zufälliges Token in der Benutzersitzung platziert. Wenn Sie die Form :: open-Methode mit POST, PUT oder DELETE verwenden, wird das CSRF-Token automatisch als verdecktes Feld den Formularen hinzugefügt. Wenn Sie alternativ den HTML-Code für das ausgeblendete CSRF-Feld generieren möchten, können Sie die Token-Methode verwenden:

echo Form :: token();

+0

Wie ich in der Frage erwähnt habe, verwende ich Laravels Standard-Auth-System. Meinst du Laravel mit Form falsch ?! (Ich glaube nicht!). Wie auch immer, ich habe versucht, aber ich bekomme den gleichen Fehler! Nichts hat sich geändert! –

+0

@ user41888 Können Sie Ihren HTML-Code teilen? Ich spreche darüber, dass ich den csrf-Token nicht auf den Post sende. –

+0

@ user41888 Sind Sie diesen Richtlinien gefolgt? https://laravelcollective.com/docs/5.2/html –