簡體   English   中英

重定向到 laravel 中的外部 url 時如何保留 session 數據

[英]how to keep session data when redirect to external url in laravel

我是 PHP 的新手。 我在不同的服務器上有一個 laravel api 和 laravel webui。 當我在 webui 中發出登錄請求時,將其發送到 api,如果結果成功,則將 laravel/passport 令牌返回給 webui。 我將令牌存儲在會話中(在 webui 身份驗證控制器中)。

授權控制器;

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

我的 CustomAuth 中間件;

    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);

然后,當付款成功/失敗時,wirecard 返回到我的網站(callbackUrl)。 在本節中,session 數據丟失,用戶重定向到登錄頁面。 我不確定我在 auth 部分是錯的還是錯誤地使用了 session。 我可以在重定向時存儲 session 數據嗎? 或者我該如何更改身份驗證部分?

注意:成功和失敗路由必須在 auth 中間件中。 還有我在 web 中間件組中的所有路由。 在 app/Http/Kernel.php 中,在 'web' 中添加了這一行

\Illuminate\Session\Middleware\StartSession::class,

理想情況下,當您構建 API 時,我們不使用web中間件組,而是使用api中間件組。 Thus if all your routes are in api.php (they should be here) then the session is not activated or it won't work because you are using api middleware group and api guard here.

另一件事是,您已經使用passport生成了一個令牌,因此您不需要將令牌存儲在session中。 這就是 Json Web 令牌的厲害之處。 當您的WebUI將令牌傳遞回后端時,可以對其進行解析。 后端/API 只需查看它並查看令牌是否經過身份驗證,在處理令牌時無需檢查 session 或類似的東西。 為此,您必須為您的 api 路由通過auth:api中間件。

最后,您必須確保WebUI以正確的形式發回令牌(例如 Bearer header、基本身份驗證等)。

祝你好運!

一種可能的解決方案:在處理付款回調時,您應該始終記住 session 數據的地址,包括 https、http、www 和 none-www 是不同的。 您應該始終強制(www 或 none-www)和(https 或 http)。 這樣,您始終可以確保用戶將始終返回到存儲用戶 session 數據的地址。

根據您使用的 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM