2016-04-14 1 views
0

Ich bin relativ neu zu Laravel. Das Problem, dem ich gegenüberstehe, ist, dass wenn ich einen Wert in der Datenbank speichere. CSRF-Token wird nicht gespeichert. Es generiert jedoch das Token aber seine Spalte Feld ist NULL. Rest funktioniert gut. Danke.CSRF-Token wird generiert Aber Spalte Feld ist Null in Spalte

Edit:

Dies ist Formulars Code

{!! Form::open(['url' => 'communities']) !!} 
     {!! Form::label('community_name', 'community_name: ') !!} 
     {!! Form::text('community_name') !!} 
     {!! Form::submit('Add Community') !!} 
    {!! Form::close() !!} 

Gerade in der Token-Spalte es NULL einfügt. nach meinem kleinen Wissen. Eine Spalte kann nur NULL sein. Wenn wir definiert haben, ist es nullable()

Controller:

public function addCommunity() { 
     $input = Request::all(); 
     Community::create($input); 
    } 

Route:

Route::group(['middleware' => 'web'], function() { 
    Route::get('community', 'UserControllers\[email protected]'); 
    Route::post('communities', 'UserControllers\[email protected]'); 
}); 

Hinweis: Ich habe versucht, es auch ohne Middleware, aber es funktioniert nicht .

Token is working fine token is generating random value it is correct

Database demonstration

Database demonstration

Modellcode:

class Community extends Model 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'community_name', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 


    ]; 
} 
+0

können Sie teilen Beispielcode, so können wir einen Vorschlag basierend auf – Qazi

+0

Ich habe den Beitrag @Qazi bearbeitet, Danke –

+0

Bitte auch den Code, der das eigentliche Speichern tut, wie eine Steuerung oder Route-Funktion ;-), dass sagte; Wahrscheinlich brauchen Sie Ihr csrf-Token nicht, da es nur eine zusätzliche Sicherheitsmaßnahme ist, die an eine einzige Sitzung gebunden ist.Grundsätzlich stellt CSRF sicher, dass ein Beitrag nicht von einer anderen Seite/Seite ohne ein Token erstellt werden kann, das vom Server pro Sitzung generiert wird. –

Antwort

0

Below I '_token' hinzugefügt, dies ist der Feldname Laravel für die csrf verwendet Zeichen.

Weil Sie \ Community :: create ($ input) verwenden; Um es zu erstellen, "füllt" Laravel die Felder, die Sie in $ fillable definiert haben, und behält dann das Objekt bei.

Ihr Modell sollte also wie folgt aussehen:

class Community extends Model 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'community_name', 
     '_token', 
    ]; 

    /** 
    * The attributes that should be hidden for arrays. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 

    ]; 
} 

Was csrf Token speichern, Sie wirklich nicht haben. Das csrf-Token wird nur während einer Sitzung verwendet, um zu verhindern, dass eine bösartige Anwendung auf Ihr Formular posten kann, da diese Anwendung dieses Token nicht besitzt. Wenn eine Sitzung beendet oder neu gestartet (regeneriert) wird, wurde das csrf-Token erneuert. So entkräften alle alten Tokens, einschließlich die, die Sie zu Ihrer Datenbank beibehalten, Ihre gespeicherten Token Sinn nutzlos sind ;-)

Saiyan Prince einen schönen Link zu Barrys ausgezeichneten Artikel über CRSF Token geteilt: https://medium.com/@barryvdh/csrf-protection-in-laravel-explained-146d89ff1357#.l5toe4emw

+0

Bitte überprüfen Sie den Modellcode, ich habe die Frage bearbeitet und danke für Ihren Rat und bitte schlagen Sie mir vor, dass Tokens Spalte ausgefüllt werden sollte oder nicht ?. @Jaap Moolenaar –

+1

Danke Mein Freund für Ihre Unterstützung und für eine vereinfachte Antwort @Jaap Moolenaar –

+0

hinzugefügt '_token' es hat nicht funktioniert (Tabellenfehler: Spalte nicht gefunden' _token'). Aber jetzt ist es ziemlich klar, dass wir es nicht speichern. Daher ist es egal, Danke nochmal –