未检测到Laravel API

时间:2014-10-13 19:27:15

标签: rest authentication mobile laravel laravel-4

我正在构建一个移动应用程序,我希望通过我的Laravel Web应用程序对其用户进行身份验证。

到目前为止,我有以下内容:

APIController.php:

/**
 * Authenticate mobile user.
 * GET /api/auth
 *
 * @return Response
 */
public function postAuth()
{

//  Extract the authentication credentials.

    $input_email = $_POST["email"];
    $input_password = $_POST["password"];

    if(Auth::attempt(array('email'=>$_POST["email"], 'password'=>$_POST["password"])))
        {
    // Authentication returns true
        $user = User::find(Auth::user()->id);

        return Response::json(array(
            'status' => 'true',
            'user' => $user->toArray())
        );

    } else {
    // Authentication returns false
        return Response::json(array(
            'status' => 'false'
            );
    }

}

Routes.php:

Route::group(array('prefix' => 'api'), function()
{
    Route::post('auth', 'APIController@postAuth');
});

基本上,我想通过将用户名和密码值传递给Laravel来测试我是否可以登录。我正在使用:

curl --user testagent@email.com:password http://localhost:8888/api/auth

它返回的错误非常长:

我想我已经弄清了错误 - 将Route改为GET而不是POST会返回错误Email variable cannot be found,这是有道理的。一旦我将路线更改回POST,就无法找到它?即使使用cURL也会出现同样的错误。

会有很多GETPOST请求,因为这只是我应用的开始!

对于最佳实践或我出错的地方,我们将非常感谢任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:0)

您必须决定要使用的身份验证类型。

<强> auth.basic

auth.basic登录是Laravel中简单HTTP Login的实现。 这不适用于API,因为此方法显示一个小窗口,用户应在其中键入凭据.n(您也可以通过cURL发送凭据,但大多数API使用常规方法。) 这种方法也有点难以定制。

在Laravel中,&#34;制造&#34;此方法在 app / filters.php 中实施。其中documentation in the code个州仅使用HTTP Basic Auth。

正常登录

使用普通登录方法时,Auth::attempt()必须确保创建用户管理表,并且模型User存在。

正常的登录方法使您能够比我在上面解释的标准HTTP方法更多地自定义登录过程。

要使用此方法,只需删除路线上的过滤器('before' => 'auth.basic')即可。 使用该方法时,您还必须将用户数据放入请求有效负载中,因为您希望在使用$_POST时从那里读取它。

示例:

curl --data "username=testagent@email.com&password=password" http://localhost:8888/api/auth

这种正常的登录流程是最佳做法,因为它比HTTP登录更安全,更容易定制。

我希望你理解我的意思,如果你有任何问题只是评论,我会尽力澄清我的答案。