没有 Eloquent 的 Lumen 自定义身份验证
Lumen custom authentication without Eloquent
在 SO 中发布关于 Lumen 和 Dingo 的问题 之后,我得到了关于如何设置这样一个系统的详细答案。
在他的设置中有一个使用 Eloquent 的小型身份验证示例。现在我们在 Lumen 中加载一个自定义框架,它有自己的模型等,并且有自己的数据库连接等。
我看不懂的是如何完全删除Eloquent,并使用我们自己的框架进行身份验证。
到目前为止我做了什么:
- 从我们的
bootstrap\app.php
中删除了 $app->withEloquent();
我认为需要完成的其他编辑是编辑 config\auth.php
,甚至可能完全删除此文件。我不太确定。
最后,在 App\Api\v1\Controllers\AuthController@postLogin
中调用了 validate
函数。此函数需要与我的框架通信,而不是通过 Eloquent。这在 Lumen 中是如何巧妙地完成的,我也不确定。
您可以阅读this。所以在你的情况下,在 App\Api\v1\Controllers\AuthController@postLogin
:
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*/
public function postLogin(Request $request)
{
try {
$this->validate($request, [
'email' => 'required|email|max:255',
'password' => 'required',
]);
} catch (HttpResponseException $e) {
return response()->json([
'message' => 'invalid_auth',
'status_code' => IlluminateResponse::HTTP_BAD_REQUEST,
], IlluminateResponse::HTTP_BAD_REQUEST);
}
$credentials = $this->getCredentials($request);
try {
// Attempt to verify the credentials and create a token for the user
// You may do anything you like here to get user information based on credentials given
if ($user = MyFramework::validate($credentials)) {
$payload = JWTFactory::make($user);
$token = JWTAuth::encode($payload);
} else {
return response()->json([
'message' => 'invalid_auth',
'status_code' => IlluminateResponse::HTTP_BAD_REQUEST,
], IlluminateResponse::HTTP_BAD_REQUEST);
}
} catch (JWTException $e) {
// Something went wrong whilst attempting to encode the token
return response()->json([
'message' => 'could_not_create_token',
], IlluminateResponse::HTTP_INTERNAL_SERVER_ERROR);
}
// All good so return the token
return response()->json([
'message' => 'token_generated',
'token' => $token,
]);
}
在 SO 中发布关于 Lumen 和 Dingo 的问题
在他的设置中有一个使用 Eloquent 的小型身份验证示例。现在我们在 Lumen 中加载一个自定义框架,它有自己的模型等,并且有自己的数据库连接等。
我看不懂的是如何完全删除Eloquent,并使用我们自己的框架进行身份验证。
到目前为止我做了什么:
- 从我们的
bootstrap\app.php
中删除了
$app->withEloquent();
我认为需要完成的其他编辑是编辑 config\auth.php
,甚至可能完全删除此文件。我不太确定。
最后,在 App\Api\v1\Controllers\AuthController@postLogin
中调用了 validate
函数。此函数需要与我的框架通信,而不是通过 Eloquent。这在 Lumen 中是如何巧妙地完成的,我也不确定。
您可以阅读this。所以在你的情况下,在 App\Api\v1\Controllers\AuthController@postLogin
:
/**
* Handle a login request to the application.
*
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*/
public function postLogin(Request $request)
{
try {
$this->validate($request, [
'email' => 'required|email|max:255',
'password' => 'required',
]);
} catch (HttpResponseException $e) {
return response()->json([
'message' => 'invalid_auth',
'status_code' => IlluminateResponse::HTTP_BAD_REQUEST,
], IlluminateResponse::HTTP_BAD_REQUEST);
}
$credentials = $this->getCredentials($request);
try {
// Attempt to verify the credentials and create a token for the user
// You may do anything you like here to get user information based on credentials given
if ($user = MyFramework::validate($credentials)) {
$payload = JWTFactory::make($user);
$token = JWTAuth::encode($payload);
} else {
return response()->json([
'message' => 'invalid_auth',
'status_code' => IlluminateResponse::HTTP_BAD_REQUEST,
], IlluminateResponse::HTTP_BAD_REQUEST);
}
} catch (JWTException $e) {
// Something went wrong whilst attempting to encode the token
return response()->json([
'message' => 'could_not_create_token',
], IlluminateResponse::HTTP_INTERNAL_SERVER_ERROR);
}
// All good so return the token
return response()->json([
'message' => 'token_generated',
'token' => $token,
]);
}