今天第一次尝试与Laravel一起玩.当我尝试访问localhost/project/public时出现以下错误:
InvalidArgumentException
未定义Route [login].
应用程序/ routes.php文件:
<?php
Route::get('/', 'HomeController@redirect');
Route::get('login', 'LoginController@show');
Route::post('login', 'LoginController@do');
Route::get('dashboard', 'DashboardController@show');
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ HomeController.php:
<?php
class HomeController extends Controller {
public function redirect()
{
if (Auth::check())
return Redirect::route('dashboard');
return Redirect::route('login');
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ LoginContoller.php:
<?php
class LoginController extends Controller {
public function show()
{
if (Auth::check())
return Redirect::route('dashboard');
return View::make('login');
}
public function do()
{
// do login
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ DashboardController.php:
<?php
class DashboardController extends Controller {
public function show()
{
if (Auth::guest())
return Redirect::route('login');
return View::make('dashboard');
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?
Jef*_*ert 70
您正在尝试重定向到名称为的命名路由login,但您没有具有该名称的路由:
Route::post('login', [ 'as' => 'login', 'uses' => 'LoginController@do']);
Run Code Online (Sandbox Code Playgroud)
'as'第二个参数的部分定义了路径的名称.第一个字符串参数定义它的路由.
ais*_*tes 38
在app\Exceptions\Handler.php中
protected function unauthenticated($request, AuthenticationException $exception)
{
if ($request->expectsJson()) {
return response()->json(['error' => 'Unauthenticated.'], 401);
}
return redirect()->guest(route('auth.login'));
}
Run Code Online (Sandbox Code Playgroud)
小智 11
Laravel 在Laravel 4.2中引入了Named Routes.
什么是命名路线?
命名路由允许您为路由器路径指定名称.因此,使用名称我们可以在所需文件中调用路由.
如何创建命名路线?
命名路由以两种不同的方式创建:as和name()
方法1:
Route::get('about',array('as'=>'about-as',function()
{
return view('about');
}
));
Run Code Online (Sandbox Code Playgroud)
方法2:
Route::get('about',function()
{
return view('about');
})->name('about-as');
Run Code Online (Sandbox Code Playgroud)
我们如何在视图中使用?
<a href="{{ URL::route("about-as") }}">about-as</a>
Run Code Online (Sandbox Code Playgroud)
因此,如果用户尚未登录,laravel'middleware '=>'auth'已经预定义为重定向作为登录页面.因此我们应该使用as关键字
Route::get('login',array('as'=>'login',function(){
return view('login');
}));
Run Code Online (Sandbox Code Playgroud)
Dib*_*Roy 11
您需要将以下行添加到web.php路由文件中:
Auth::routes();
Run Code Online (Sandbox Code Playgroud)
如果您有自定义身份验证路由,请确保/ login路由具有'as'=>'login'
在 API 的情况下,或者在实现 JWT 时说。JWT 中间件在找不到令牌时会抛出此异常,并将尝试重定向到登录路由。由于在指定的路由中找不到任何日志,因此会引发此异常。您可以在“app\Exceptions\Handler.php”中更改路由
使用 Illuminate\Auth\AuthenticationException;
protected function unauthenticated($request, AuthenticationException $exception){
return $request->expectsJson()
? response()->json(['message' => $exception->getMessage()], 401)
: redirect()->guest(route('ROUTENAME'));
}
Run Code Online (Sandbox Code Playgroud)
聚会迟到了。如果您的期望是返回某种 json 而不是重定向,则编辑异常处理程序,这样做即可。
转到App\Exceptions\Handler.php
然后编辑此代码:
public function render($request, Exception $exception)
{
return parent::render($request, $exception);
}
Run Code Online (Sandbox Code Playgroud)
到
public function render($request, Exception $exception)
{
return response()->json(
[
'errors' => [
'status' => 401,
'message' => 'Unauthenticated',
]
], 401
);
}
Run Code Online (Sandbox Code Playgroud)
我最近在使用 Laravel 的内置身份验证路由后遇到了这个错误php artisan make:auth。当您运行该命令时,这些新路由将添加到您的 web.php 文件中:
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Run Code Online (Sandbox Code Playgroud)
我一定是不小心删除了这些路线。再次运行,php artisan make:auth路线恢复,问题解决。我正在运行 Laravel 5.5.28。
小智 5
Route::get('/login', function () {
return view('login');})->name('login');
Run Code Online (Sandbox Code Playgroud)
如果使用您自己的自定义身份验证系统,请命名您的登录路径。