当前位置: 首页 > 知识库问答 >
问题:

登录后Laravel路由不工作

贺波
2023-03-14

我是拉威尔的新手,刚刚开始构建我的第一个应用程序。我使用的是Laravel5.2。5.我正在跟踪laracast视频以实现身份验证。当我第一次启动应用程序时,我可以访问/auth/register、/auth/login和/auth/logout。注册和登录工作正常。Register在我的用户表中创建一个条目,/auth/login允许我使用该用户登录。成功登录后,我尝试注销。当我尝试访问/auth/logout时,我得到一个NotFoundHttpException。当我尝试访问/auth/login和/auth/register时,我会遇到相同的异常。此时,我只能访问欢迎页面和测试页面。在欢迎页面上,我显示了当前登录的用户,我可以看到他仍在登录。我没有更改其余文件中的任何代码。

这是我的routes.php代码:

Route::group(['middleware' => ['web']], function () {
    Route::get('welcome', function () {
        return view('welcome');
    });
    Route::get('test','TestController@index');

    Route::get('auth/login', 'Auth\AuthController@getLogin');
    Route::post('auth/login', 'Auth\AuthController@postLogin');
    Route::get('auth/logout', 'Auth\AuthController@getLogout');

// Registration routes...
    Route::get('auth/register', 'Auth\AuthController@getRegister');
    Route::post('auth/register', 'Auth\AuthController@postRegister');
});

身份验证控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;

class AuthController extends Controller
{  

    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/welcome';

    /**
     * Create a new authentication controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|confirmed|min:6',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);
    }
}

登录。刀身php:

<form method="POST" action="/auth/login">
    {!! csrf_field() !!}

    <div>
        Email
        <input type="email" name="email" value="{{ old('email') }}">
    </div>

    <div>
        Password
        <input type="password" name="password" id="password">
    </div>

    <div>
        <input type="checkbox" name="remember"> Remember Me
    </div>

    <div>
        <button type="submit">Login</button>
    </div>
</form>

登记刀身php:

<form method="POST" action="/auth/register">
    {!! csrf_field() !!}

    <div>
        Name
        <input type="text" name="name" value="{{ old('name') }}">
    </div>

    <div>
        Email
        <input type="email" name="email" value="{{ old('email') }}">
    </div>

    <div>
        Password
        <input type="password" name="password">
    </div>

    <div>
        Confirm Password
        <input type="password" name="password_confirmation">
    </div>

    <div>
        <button type="submit">Register</button>
    </div>
</form>

欢迎刀身php:

            <div class="title">Laravel 5</div>
            <div>{{\Auth::user()}}</div>

共有1个答案

梅飞宇
2023-03-14

长话短说:这是因为您没有注册'/'路由。

详细说明:当您尝试访问/auth/login/auth/register时,我将首先回答您的NotFoundHttpException

在您的AuthController中,您将看到以下代码行:

public function __construct()
{
    $this->middleware('guest', ['except' => 'logout']);
}

这段代码基本上确保只有来宾(或未经身份验证的用户)可以访问,除非涉及注销方法。

这个“来宾”中间件是什么?如果您查看app/Http/Kernel内部。php,您将看到这行代码:

'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,

“guest”基本上是RedirectIfAuthenticated类的别名。在该类中,您将看到以下代码行:

if (Auth::guard($guard)->check()) {
    return redirect('/');
}

接下来,当您出于同样的原因尝试注销时,您会遇到同样的异常。当您尝试注销时,它将触发以下代码:

public function logout()
{
    Auth::logout();

    return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
}

换句话说,您将被重定向到您尚未注册的'/'页面。如果要重定向到另一页而不是“/”页,请将此行代码添加到AuthController

protected $redirectAfterLogout = '/some-other-route';
 类似资料:
  • 我正在构建angular2应用程序,目前我有一个家庭组件与菜单栏和路由器出口的主要内容。我添加了登录机制,所以如果用户没有经过身份验证,那么登录页面将显示在整个屏幕上,登录后用户将被路由到上面结构的主/主组件。 当我运行登录页面加载的应用程序时,成功验证后,它会将我路由到主页,但在加载菜单的主页(如Dashboard1、Dashboard2、Report1等)中,链接无法正常工作。当我点击任何菜单

  • 我有一个登记表,它可以注册和登录用户。我使用

  • 每个人登录后,我一直无法使用Laravel重定向。连接工作,在我登录后,它重定向到一个空白页面,但如果我更改url路径,我可以访问不同的网页。我们将不胜感激!我正在使用LDAP进行连接,它正在工作。 请让我知道,如果有任何其他代码,我应该提供。 非常感谢。 (重定向IfAuthenticated.php) 命名空间应用程序\ Http\中间件; 使用闭包;使用Illumb\Support\Faca

  • 作为一个 web 后台框架,路由无疑是极其重要的一部分。本博客接下来几篇文章都将会围绕路由这一主题来展开讨论,分别讲述: 路由的使用 路由属性注册 路由的正则编译与匹配 路由的中间件 路由的控制器与参数绑定 RESTful 路由 和之前一样,第一篇将会利用单元测试样例说明我们在平时可能用到的 route 的 api 函数用法,后面几篇文章将会剖析 laravel 的 route 源码。下面开始介绍

  • 我正在开发一个Laravel身份验证系统,当注册生效时,用户会登录,并在数据库中创建条目,但登录不起任何作用。我已经包括了谷歌硬盘上压缩的Laravel项目文件夹,因此如果您设置自己的数据库,您可以直接查看服务器配置不足的任何潜在原因。注意,这个问题在我添加jquerymobile之前就存在了,所以它不是AJAX负载。 https://drive.google.com/file/d/0BzXcUh

  • 我现在一直在努力使用我的登录页面来让组件呈现Loggedin组件。我的前端是Reactjs,后端是NodeJS。我对nodejs、expression和react都是新手。 在loginform组件上,我使用fetch进行了一次post,它将用户名和密码传递给后端的相应endpoint。没问题。在后端,它读取我存储用户(不使用任何数据库)的jsonfile来查找匹配项,如果用户名和密码都匹配,则它