【发布时间】:2018-09-15 04:24:22
【问题描述】:
我有来自 Web 和 API 的登录功能。我创建了一个请求文件,并为此编写了规则。对于网络,它运行良好并按预期给出输出,但是当我在 API 控制器中使用它时,它会将我重定向到登录页面,它应该返回 JSON 响应。
还有一件事,我想在失败或成功时添加额外的参数“status”。
这是我的代码 请求文件
public function rules()
{
return [
'username' => 'required',
'password' => 'required'
];
}
API 控制器
public function login(Request $request)
{
$response = array();
$validator = Validator::make($request->all(), [
'username' => 'required',
'password' => 'required'
]);
if ($validator->fails()) {
$response['status'] = false;
$response['message'] = $validator->messages();
return Response::json($response);
}
try {
$username = trim($request->username);
$password = trim($request->password);
$isAuth = $this->userRepository->login($username, $password);
if ($isAuth) {
$user = Auth::user();
$response['status'] = true;
$response['message'] = Lang::get('custom.auth_success');
$response['user_detail'] = $user;
} else {
$response['status'] = false;
$response['message'] = Lang::get('auth.failed');
}
} catch (\Exception $e) {
$response = array();
$response['status'] = false;
$response['message'] = Lang::get('custom.something_wrong');
}
return Response::json($response);
}
和网络控制器
public function checkAuth(UserAuthenticate $request)
{
try {
$username = trim($request->username);
$password = trim($request->password);
$isRemember = false;
if (isset($request->remember) && $request->remember == 'on') {
$isRemember = true;
}
$isAuth = $this->userRepository->login($username, $password, $isRemember);
if ($isAuth) {
return redirect('programs');
} else {
return redirect('login')->withInput()->withErrors(['username' => Lang::get('auth.failed')]);
}
} catch (\Exception $e) {
return redirect('login')->withInput()->withErrors(['error' => Lang::get('custom.something_wrong')]);
}
}
路由/web.php
Route::group(['middleware' => ['guest']], function () {
Route::get('login', ['as' => 'login', 'uses' => 'Front\UserController@login']);
});
路由/api.php
Route::post('user/authenticate', 'API\UserController@login');
我寻找解决方案,但没有找到任何东西
【问题讨论】:
-
您的 API 路由使用什么身份验证机制?你能告诉我们你的 api 路线吗?
-
@user3574492,我更新了我的问题并为 web 和 api 添加了路由文件代码
-
你用护照认证吗
-
@afsalc,是的。但是我在 API 中间件中添加了这些路由。登录路由不在 API 中间件中
-
请分享
public function login(UserAuthenticate $request){}的完整代码?
标签: laravel api laravel-5.5