1

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

当用户在生成的链接上验证他们的电子邮件时,问题就出现了,他们不是被重定向到外部应用程序,而是再次回到 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');
        }
    }
}

其中 SPA_URL 在 .env 中设置为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。

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

4

2 回答 2

0

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

于 2021-03-18T08:48:08.757 回答
0

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);
}
于 2021-03-16T21:32:43.667 回答