laravel - Laravel 中未定义路由登录

标签 laravel routes jwt

我有一个问题,为什么当我访问登录/注册页面时总是给出路线[登录]未定义我已经尝试搜索我的问题但没有任何结果发生,我会给我的详情如下。

用户 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/

相关文章:

php - 使用 Slim PHP 的默认 GET 路由

javascript - 如何让 AngularJS 响应导航

jwt - 将 on_premise_sam_account 属性添加到 Azure 广告的 JWT 声明

node.js - 使用 React 和 Node 进行 Firebase 身份验证

php - laravel 无法打开流 : No such file or directory error

mysql - Laravel 5.6 - 不支持 ALGORITHM=COPY

php - Laravel Eloquent : Inverse of Many To Many (Polymorphic)

Laravel Blade 模板扩展了两种不同的布局

laravel - 如何定义到同一个 Controller 的两条不同路由?

java - JWT token 过期检查