Laravel 重定向离开方法重定向到自己的域

Posted

技术标签:

【中文标题】Laravel 重定向离开方法重定向到自己的域【英文标题】:Laravel redirect away method redirects to own domain 【发布时间】:2021-06-14 05:34:15 【问题描述】:

我正在为 www.myurl.com 上托管的应用程序编写一个托管在 api.url.com 上的 Laravel API,该应用程序与使用 Laravel Fortify 的 Lravel API 不同。

当用户在生成的链接上验证他们的电子邮件时,问题就出现了,他们不会被重定向到外部应用程序,而是再次返回到 API,而是在他们的浏览器上。

文档声明 Authenticate.pgp 中间件中的此配置可以工作:

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware

    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    
        if (! $request->expectsJson()) 
            return url(env('SPA_URL') . '/dashboard');
        
    

其中 .env 中的 SPA_URL 设置为 www.myurl.com。

这会重定向到 api.url.com/www.myurl.com/dashboard 显然会导致 404 响应。

然后我尝试在控制器上调用一个动作

public function redirectDashboard(Request $request)
        return redirect()->away('www.myurl.com/dashboard');
    

再次重定向到api.url.com/www.myurl.com/dashboard显然导致404响应。

我不知道为什么 redirect()->away 仍然会重定向到同一个 API 域上的 url。

任何帮助将不胜感激,谢谢。

【问题讨论】:

添加 https:// 然后尝试return redirect()-&gt;away('https://www.myurl.com/dashboard'); 【参考方案1】:

RedirectTo 方法将重定向到请求。

尝试编写新的中间件

public function handle($request, Closure $next)

    //check here if the user is authenticated
    if ( ! $this->auth->user() )
    
        // here you should redirect to another site
        return redirect(env('SPA_URL') . '/dashboard');
    

    return $next($request);

【讨论】:

我找到了解决方案,会尽快发布,但无论如何感谢您的宝贵时间。【参考方案2】:

我终于意识到重定向发生了什么:我使用的是redirect() 辅助函数而不是Redirect::class。辅助函数将当前域附加到任何 urlaway 方法调用,而 Redirect::class 允许您重定向到您需要的任何地方。

【讨论】:

以上是关于Laravel 重定向离开方法重定向到自己的域的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 - 重定向到 HTTPS

Laravel 8重定向到特定页面问题

Laravel 5.2 Entrust:如果他手动添加受限URL,则重定向用户

Safari 是不是正确处理临时重定向 (307) 到不同的域?

将域重定向到另一个域并将重定向的域附加为查询字符串

301 重定向到 URL 中带有 # 的域