我正在用laravel 4和sentry 2构建一个RESTful API,我尝试用postSignin方法创建API,但是failed.correction在postSignin中乞求--这是过滤器和路由。
滤波器
Route::filter('api', function()
{
// Check if the user is logged in
if ( ! Sentry::check())
{
return Response::json(array('digle'=> array(
'status' => 1,
'desc' => 'Unauthorized',
)));
}
});路由
Route::group(array('prefix' => 'api/v1','before' => 'api'), function()
{
//Test
Route::get('/', array('as'=>'/', 'uses'=>'ApiTestController@getIndex'));
//Login
Route::get('signin', array('uses' => 'ApiTestController@getSignin'));
Route::post('signin', 'ApiTestController@postSignin');
//Logout
Route::get('logout', array('uses' => 'ApiTestController@getLogout'));
});控制器
/**
* Route /signin
*
* @return Response POST
*/
public function postSignin()
{
//Declare the rules for the form validation
$rules = array(
'email' => 'required|email',
'password' => 'required|between:3,32',
);
// Create a new validator instance from our validation rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails())
{
// Ooops.. something went wrong
//return Redirect::back()->withInput()->withErrors($validator);
return Response::json(array('digle' => array(
'Error' => 'error',
)));
}
try
{
$userdata = array(
'email' => Input::get('email'),
'password'=> Input::get('password')
);
// Try to log the user in
Sentry::authenticate($userdata, false);
return Response::json(array('digle' => array(
'status' => 0,
'desc' => 'succes'
)));
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
return Response::json(array('digle' => array(
'status' => $this->messageBag->add('email', Lang::get('auth/message.account_not_found'))
)));
}
catch (Cartalyst\Sentry\Users\UserNotActivatedException $e)
{
return Response::json(array('digle' => array(
'status' => $this->messageBag->add('email', Lang::get('auth/message.account_not_activated'))
)));
}
catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e)
{
return Response::json(array('digle' => array(
'status' => $this->messageBag->add('email', Lang::get('auth/message.account_suspended'))
)));
}
catch (Cartalyst\Sentry\Throttling\UserBannedException $e)
{
return Response::json(array('digle' => array(
'status' => $this->messageBag->add('email', Lang::get('auth/message.account_banned'))
)));
}
//something went wrong
return Response::json(array('digle' => array(
'status' => 0
)));
}并使用params、电子邮件和密码发出get请求http://xxx.xx/api/v1/signin,然后测试代码,使用邮递员或test客户端。
发布于 2014-05-22 07:37:14
您的在route =>‘api’筛选器中对于签名路由是活动的.
过滤器阻止'@postSignin‘操作的运行,因此您将始终看到过滤器生成的“未经授权的”响应。
解决方案:您必须将“signin”路由移出“api”组之外,或者将该操作排除在被哨兵检查筛选的范围之外。
https://stackoverflow.com/questions/17936609
复制相似问题