laravel中重定向到外部url时如何保留会话数据?

问题描述 投票:1回答:1

我是PHP新手。我在不同的服务器上有一个laravel api和laravel webui。当我在webui中提出登录请求时,我把它发送到api,如果结果是成功的,就返回laravelpassport令牌给webui。我把token存储在session(webui auth控制器)中。

AuthController;

Session::put('token', $value['token']);

我的CustomAuth Middleware;

    class CustomAuth extends Middleware {
        public function handle($request, Closure $next, $guard = null){
            if (Session::has('token')) {
                return $next($request);
            } else {
                return response(view('pages.unauthorized'));
            }
        }
    }

支付方式。

return redirect()->away($redirectUrl);

然后,当支付成功fail wirecard返回到我的网站(callbackUrl)。在这部分,会话数据丢失,用户重定向到登录页面。我不知道是我的auth部分出错了还是session使用不正确。我可以在重定向时存储会话数据吗?或者说,我怎么才能改变auth部分?

注意:成功和失败的路由必须在 auth 中间件中。而我的所有路由都在web中间件组中。在appHttpKernel.php中,在'web'中添加了这行。

\Illuminate\Session\Middleware\StartSession::class,
php laravel authentication session laravel-passport
1个回答
0
投票

理想情况下, 当你在构建一个API时, 我们不需要使用 web 中间件组但 api 中间件组。因此,如果您的所有路由都在 api.php(它们应该在这里),那么这个会话就没有被激活,或者它不能工作,因为你使用的是 api 中间件组和 api 守护在这里。

还有一点,你已经在使用 passport 所以你不需要将令牌存储在 session. 这就是Json Web Token的厉害之处。它可以被解析,当你的 WebUI 将token传回后台。后台API只需查看它并查看token是否经过验证,当你处理token时,不需要检查session或类似的东西。要做到这一点,你必须通过 auth:api 中间件的api路由。

最后,你必须确保在你的中间件中的 WebUI 正在以正确的形式发送回令牌(例如:Bearer header,基本的auth等)。

祝您好运


0
投票

一个可能的解决方案。当使用回调支付时,您应该始终记住,包括https、http、www和none-www在内的地址的会话数据是不同的。你应该总是强制使用(www或none-www)和(https或http),这样你就可以确保用户总是回到存储用户会话数据的地址。

根据你所使用的web服务器,做这个的方法将是不同的。

例如,如果你使用的是apache,你可以在htaccess中使用以下配置。

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # remove wwww.
    RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
    RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,QSA,NC,L]

    # redirect to https
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,QSA,L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
© www.soinside.com 2019 - 2024. All rights reserved.