Laravel 4.2使用Auth :: onceBasic()返回json响应

时间:2014-11-06 14:35:06

标签: php json laravel laravel-4

所以我在REST API请求上有一个前置过滤器,如下所示:

Route::filter('auth.api', function() {
    Config::set('session.driver', 'array');
    return Auth::onceBasic('username');
});

这对我来说非常有效,除了我宁愿它返回一个json响应。所以我尝试在Request::json()中围绕它并且失败了。然后我想我可以制作一个AFTER过滤器,以json的形式返回响应。但是,我无法确定此时身份验证是否成功。

Route::filter('auth.api.after', function($request, $response) {
    die(var_dump($response));
});

我想在失败时回应json。我怎么能这样做?

工作代码:

Route::filter('auth.api', function() {
    Config::set('session.driver', 'array');
    $response = Auth::onceBasic('username');

    if (!is_null($response)) {
        $failMessage = [
            'status' => 'error',
            'message' => 'Invalid Credentials'
        ];

        $headers = ['WWW-Authenticate' => 'Basic'];
        return Response::json($failMessage, 401, $headers);
    }
});

3 个答案:

答案 0 :(得分:1)

Auth::onceBasic返回响应(如果失败)或null(如果成功)。从那里创建一个json响应是不可能的。

您需要首先检查身份验证是否成功,如果是,请使用其他方法获取用户。

Route::filter('auth.api', function() {
    Config::set('session.driver', 'array');

    // Return the response onceBasic gives us if auth fails, otherwise get the current logged in user and turn it into a json response.
    return Auth::onceBasic('username') ?: Response::json(Auth::user()->toArray());
});

如果您总是想要返回json回复,只需检查onceBasic是否返回null

Route::filter('auth.api', function() {
    Config::set('session.driver', 'array');

    // If onceBasic doesn't return null, it means auth failed.
    if (null !== Auth::onceBasic('username')) {
        $message = ['status' => 'error', 'message' => 'Invalid credentials'];
        $headers = ['WWW-Authenticate' => 'Basic'];

        return Response::json($message, 401, $headers);
    }

    return Response::json(['status' => 'success', 'message' => 'Auth succeeded'], 200);
});

答案 1 :(得分:0)

不确定这是否有帮助。而不是简单地返回Auth :: onceBasic,在那里做一个简单的if-else:

如果(AUTH :: onceBasic) 返回Your-Defined-Json-Response-Success 其他 返回Your-Defined-Json-Response-Success

答案 2 :(得分:0)

我认为你应该能够做到这一点:

Route::filter('auth.api', function() {
    Config::set('session.driver', 'array');
    $result = json_encode(Auth::onceBasic('username'));
    return $result;
});

只要Auth::onceBasic('usersname');返回一个对象或数组,即'key' => 'value',如果json_encode可编码即可。尝试一下,看看会发生什么。另外,尝试使用var_dumping或dding dd($result);来查看它的内容。