Laravel 中路由跳转

  • 问题描述:
    • auth 中间件中, 我想要未登录的用户跳转到其他的路径, 而不是默认的 login, 我没有使用命名路由
  • 代码如下:
<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            // return route('login'); 默认的
            return redirect('admin/login');
        }
    }
}
  • 报错信息:

    Laravel 中路由跳转

  • 尝试解决办法:
    按照这边 文章 的说法, 在后面链式调用 with() 方法并没有生效


  • 我目前发现的 laravel 中路由跳转一共有两种方法, route()redirect(), 其中 route() 需要的参数是命名路由, redirect() 需要的是路由地址
  • 那么当不想用命名路由的时候, 上面 redirect() 函数也出问题的时候该怎么办呢? 求指教下
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案
return 'admin/login';
2年前 评论
qingshui (楼主) 2年前
讨论数量: 4

header('Location: www.example.com/');

2年前 评论
qingshui (楼主) 2年前
随波逐流

老哥, 这个方法返回的是string, :smile:, ( ps: 别问为什么, 我以前也犯过错误,哈哈 )

2年前 评论
qingshui (楼主) 2年前
return 'admin/login';
2年前 评论
qingshui (楼主) 2年前

Authenticate 中间件的 redirectTo 的方法中,返回值不应该是跳转操作,应该是 字符串 形式的路由地址,比如 /login/home ,你没有使用路由别名的情况下,应该把完整的路由地址写在 return

protected function redirectTo($request)
{
    if (! $request->expectsJson()) { 
        return 'admin/login';
    }
 }

你可以打印一下原来的写法 return route('login'); ,可以看到其实这里返回的只是一个字符串而已,并没有做 redirect注意看

    protected function unauthenticated($request, array $guards)
    {
        // AuthenticationException 方法接收的第3个参数,只是需要一个路由地址字符串,该方法中已经进行了跳转,所以不需要在 redirectTo 方法中再跳转一次了
        throw new AuthenticationException(   
            '请登录后进行操作', $guards, $this->redirectTo($request)  
        );
    }

再看下 AuthenticationException 方法

public function __construct($message = 'Unauthenticated.', array $guards = [], $redirectTo = null)
    {
        parent::__construct($message);

        $this->guards = $guards;
        $this->redirectTo = $redirectTo;  // 看这里
    }
2年前 评论
qingshui (楼主) 2年前
MArtian (作者) 2年前
qingshui (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!