我有一个问题,为什么当我访问登录/注册页面时总是给出路线[登录]未定义
我已经尝试搜索我的问题但没有任何结果发生,我会给我的详情如下。
用户 Controller :
public function __construct() {
$this->middleware('auth:api', ['except' => ['login', 'register']]);
}
在这种情况下,我想在成功登录后获取 token 和用户详细信息,并且它正在工作,我获得了 token 并获得了用户详细信息,但是当我注销并返回登录或注册页面时,这是错误的,并且对于消息 Route [login] is not Defined
,但是当我删除 __construct()
时它正在工作,但是当我使用同一帐户再次登录时, token 和详细信息用户给出的是 null 值,我将在下面给出我的路线详细信息。
路线:
Route::get('/', function () {
return redirect('auth');
});
Route::get('auth', 'UserController@viewLogin');
Route::get('register', 'UserController@viewRegister');
Route::get('dashboard', 'DashboardController@view');
Route::group(['prefix' => 'auth'], function () {
Route::post('login', 'UserController@login');
Route::post('logout', 'UserController@logout');
Route::get('user-profile', 'UserController@userProfile')->middleware('jwt.verify');
});
更新登录帖子:
$user_data = [
'email' => $email,
'password' => $password,
'is_active' => 1
];
$user_credentials = JWTAuth::attempt($user_data);
if (!$user_credentials) {
return response()->json([
'error_message' => 'Your account is not registered yet, please register first'
], 401);
} else {
return response()->json([
'user' => JWTAuth::user(),
'token' => $user_credentials,
'success_message' => "Login Successfuly",
]);
}
表单登录:
<form action="javascript:;" method="POST" autocomplete="off">
@csrf
<div class="form-group">
<label class="font-weight-normal">Email</label>
<div class="input-group">
<input type="email" class="form-control" name="email" placeholder="<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d6a3a5b3a496bbb7bfbaf8b5b9bb" rel="noreferrer noopener nofollow">[email protected]</a>">
<div class="input-group-append">
<div class="input-group-text input-group-email">
<span class="fas fa-envelope"></span>
</div>
</div>
</div>
<div class="text-danger" id="email-err"></div>
</div>
<div class="form-group">
<label class="font-weight-normal">Password</label>
<div class="input-group">
<input type="password" class="form-control" name="password" placeholder="********">
<div class="input-group-append">
<div class="input-group-text input-group-password">
<span class="fas fa-eye clicked" id="show-hide"></span>
</div>
</div>
</div>
<div class="text-danger" id="password-err"></div>
</div>
<div class="row">
<div class="col-12">
<button type="submit" id="login-process" class="btn btn-block" disabled>Sign In</button>
</div>
</div>
</form>
Javascript:
$("#login-process").on('click', function () {
const emailValue = $("input[name='email']").val();
const passwordValue = $("input[name='password']").val();
$.ajax({
url: "auth/login",
method: "POST",
async: true,
data: {
email: emailValue,
password: passwordValue,
},
success: function (success) {
// describe one by one success method
const accessToken = success['token'];
const successMessage = success['success_message'];
localStorage.setItem('monitoring-barang', accessToken);
window.location.replace('dashboard');
},
});
});
最佳答案
此错误可能与您的 XHR 请求没有正确的 Accept
header (应为 application/json
)有关。
这将使 auth
中间件做出响应,但即使您将其与 api
结合使用,缺少 Accept
header 也会使 >web
中间件组通过其身份验证进行响应。
这将有效地触发 app/Http/Middleware/Authenticate.php
中的 redirectTo
方法,其中 on line 18 ,有一个名为 login
的路由的引用,该路由是您通过将 except
参数添加到 Controller 中的中间件方法而明确未添加的路由。
解决方案是注释掉重定向,为此目的创建一个虚拟路由或实现更好的策略,例如 Sanctum
关于laravel - Laravel 中未定义路由登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65949964/