【问题标题】:REST api authenication with laravel 4 and sentry 2使用 laravel 4 和 sentry 2 进行 REST api 身份验证
【发布时间】:2013-07-29 23:38:34
【问题描述】:

我正在使用 laravel 4 和 sentry 2 构建一个 RESTful API,我尝试使用 postSignin 方法创建 API 但失败了。更正请求在 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
    )));
}

并使用参数电子邮件和密码发出获取请求http://xxx.xx/api/v1/signin,然后我使用邮递员或restclient测试代码

【问题讨论】:

  • 使用 POST 请求代替 GET 请求。
  • @RubensMariuzzo 你能实现吗
  • 你能详细说明 Laravel 返回的错误吗?
  • 返回结果过滤进来的哨兵,因为他不能检查用户 这是它返回的结果 'status' => 1, 'desc' => 'Unauthorized',

标签: json api rest laravel cartalyst-sentry


【解决方案1】:

您的 before=>'api' 过滤器对 signin 路由有效。

过滤器阻止“@postSignin”操作运行,因此您将始终看到过滤器生成的“未授权”响应。

解决方案:您必须将 'signin' 路由移到 'api' 组之外,或者以其他方式将操作从哨兵检查过滤中排除。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2013-01-05
    • 1970-01-01
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多