开发者社区 问答 正文

从另一个站点重定向后,为什么is_user_logged_in()返回false?

我正在开发一个WordPress网站,在用户注册该网站后,该网站将重定向到外部支付网关。用户付款后,用户将被重定向到页面以完成其注册。

这是用于重定向的代码:

$login_data['user_login'] = $email;
$login_data['user_password'] = $password;
$login_data['remember'] = true;
$user = wp_signon($login_data);
if(!is_wp_error($user)){
    wp_set_current_user( $user->ID, $email );
    wp_set_auth_cookie( $user->ID, true, false );
    wp_redirect("https://another_payment_gateway.com");
    exit;
}

用户将被重定向并填写付款表格。成功后,用户将被重定向到登录页面。如果未登录,则会显示未登录用户的对话框。这是该页面上的代码:

  $user = wp_get_current_user();
  //code for logged in users
}else{
  //message for non logged in users 
}

如果我转到帐户页面,则表明该用户已登录。但是当从其他站点重定向时,is_user_logged_in()返回false。任何对此问题的见解将不胜感激。

展开
收起
社区秘书 2019-11-19 14:32:40 611 分享 版权
阿里云 AI 助理回答

遇到这种情况,可能是由于session或cookie在重定向过程中没有被正确处理。当用户从外部支付网关返回时,WordPress可能无法识别之前的登录状态。以下是一些可能的解决方案和检查点:

  1. 确保支付网关支持并正确设置了回调URL:你需要在支付网关设置中指定一个回调URL(通常称为“成功页面”),这个页面会在用户完成支付后接收支付网关的通知,并在此页面上处理登录逻辑或者直接完成用户的注册流程。

  2. 使用WordPress Action Hooks处理登录:考虑在用户从支付网关返回时,利用WordPress的init钩子来检查特定的查询参数或会话变量,以确认用户已经支付并自动登录他们。例如,你可以在支付网关重定向回来的URL中添加一个唯一的交易ID作为查询参数,然后在WordPress的init钩子中检查这个参数,验证支付状态,并手动登录用户。

  3. 管理Cookie和Session的一致性:确保你的网站和支付网关之间关于cookie和session的设置是兼容的。特别是跨域问题,如果支付网关是在不同的域名下,需要确保相关的cookie策略(如SameSite属性)不会阻止session信息的传递。

  4. 清理缓存和Cookies:有时候,用户的浏览器缓存或旧的cookies可能会干扰登录状态的判断。建议用户清除浏览器缓存和cookies,尤其是与你的网站相关的,然后重新尝试。

  5. 增加日志记录:为了更好地诊断问题,在关键的登录处理步骤中增加日志记录,比如wp_signon、wp_set_current_user等函数调用前后,记录相关变量的状态和错误信息,这有助于追踪问题发生的具体环节。

  6. 检查安全插件或设置:有时,安全插件或WordPress的安全设置(如限制登录尝试、IP锁定等)可能会意外阻止用户登录。检查这些设置,确保它们没有误判合法的登录请求。

通过上述方法排查和调整,你应该能够解决用户从支付网关重定向回来后登录状态丢失的问题。如果问题依旧,可能需要更深入地分析支付网关的文档,了解其重定向机制和如何最好地集成到WordPress中。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: