2015-01-05 2 views
0

В Laravel я получаю "CSRF" выпуск "Осветите \ Session \ TokenMismatchException"Laravel "CSRF" вопрос "Осветите Session TokenMismatchException"

Route::group(array('before'=>'guest'),function() 
{ 
    Route::get('/user/create',array('uses'=>'[email protected]')); 
    Route::get('/user/login',array('uses'=>'[email protected]','as'=>'postCreate')); 

    Route::group(array('before'=>'csrf'),function() 
    { 
     Route::get('/user/create','[email protected]'); 
     Route::get('/user/login','[email protected]'); 
    }); 
}); 

, который контроллер

class UserController extends BaseController{ 
public function getCreate() 
{ 
    //return View::make('hello'); 
    return View::make('user.register'); 
} 

что вид

<div class="container"> 
<h1>Register</h1> 
<form role="form" method="post" action="{{ URL::route('postCreate')}}"> 
    <div class="form-gourp"> 
     <label for="username">Username: </label> 
     <input id="username" name="username" type="text" class="form-control" /> 
    </div> 
    <div class="form-gourp"> 
     <label for="password">Password: </label> 
     <input id="password" name="password" type="text" class="form-control" /> 
    </div> 
    <div class="form-gourp"> 
     <label for="username">confirm Password: </label> 
     <input id="cpassword" name="cpassword" type="text" class="form-control" /> 
    </div> 
    {{form::token()}} 
    <div class="form-gourp"> 
     <input type="submit" value="register" class="btn btn-default"/> 
    </div> 
</form> 

Когда я добавляю {{form::token }}, он показывает ошибку «Осветите \ Session \ TokenMismatchException»

+0

просто любопытно: это 'form-gourp' правильное имя класса, или оно должно быть' form-group'? – yochannah

+0

Создает ли он правильный HTML? Если вы посмотрите на источник в своем браузере, вы увидите поле типа 'hidden', содержащее токен – lukasgeiter

+0

. No form-gourp неверен, но правильный - это группа форм, и я заменил его и спасибо, что исправил меня ... – hu7sy

ответ

3

Вы ошибаетесь в маршрутах.

Route::group(array('before'=>'csrf'),function() 
{ 
    Route::get('/user/create','[email protected]'); 
    Route::get('/user/login','[email protected]'); 
}); 

Те должны быть post, как следующий

Route::group(array('before'=>'csrf'),function() 
{ 
    Route::post('/user/create','[email protected]'); 
    Route::post('/user/login','[email protected]'); 
}); 

Подробнее о CSRF на wiki и laravel doc.

+0

спасибо, что это работает для меня ... – hu7sy

+0

Если эта работа, пожалуйста, сделайте отметку :) @ user2377300 –

1

Используйте {{ Form::open() }} и {{ Form::close() }}, а не <form> теги

+2

'Form :: token()' все равно должен работать. 'Form :: open()' не требуется, чтобы токены CSRF работали. – lukasgeiter

+0

благодарит меня за исправление ... – hu7sy

Смежные вопросы