我正在构建一个移动应用程序,我希望通过我的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也会出现同样的错误。
会有很多GET
和POST
请求,因为这只是我应用的开始!
对于最佳实践或我出错的地方,我们将非常感谢任何帮助。非常感谢。
答案 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登录更安全,更容易定制。
我希望你理解我的意思,如果你有任何问题只是评论,我会尽力澄清我的答案。