使其只能通过重定向访问 url

Posted

技术标签:

【中文标题】使其只能通过重定向访问 url【英文标题】:Make it so url can only be accessed through redirect 【发布时间】:2021-05-21 11:48:06 【问题描述】:

我正在将我的用户从 paypal 付款重定向到 register.html,以便您只有在支付订阅费用后才能注册。

如何才能使此重定向成为访问页面的唯一方法,而不是简单地将 mysite.com/register 放入浏览器?

我有需要登录的页面,但显然这是在用户注册之前,所以不能这样做。

【问题讨论】:

【参考方案1】:

您可以在您的网址中添加付款 ID,例如: mysite.com/register/ 然后检查支付ID是否被确认,如果完成则显示注册表或如果支付错误则重定向

【讨论】:

【参考方案2】:

对于 OP 中发布的要求,您可能有兴趣使用 HttpRequest.META 中的 HTTP_REFERER 来告诉您用户从哪里重定向。

这是一个关于如何在 django 中实现它的示例视图

def your_view(request):
    print(request.META.get('HTTP_REFERER'))
    if request.META.get('HTTP_REFERER') == 'whatever url of paypal you want to allow':
        some_context = 
        return render(request, 'yourhtml.html', some_context)
    return redirect('/') # it can be redirected to anywhere if user is not intended audience

因此它只会向来自您在 if 条件中设置的 url 的用户显示此视图

注意:我不会说它是安全的,但它可以解决问题

为了确保安全,我建议您设置一个短暂的临时令牌,例如 jwt 或其他用于用户验证的东西(如果可能的话)。我对paypal不太了解,所以不会多说。

【讨论】:

因此,使用 Paypal 时,每笔交易都会在 URL 上添加一个唯一的结帐令牌。我怎样才能使引用者接受来自 sandbox.paypal.com 的重定向的所有内容? 据我所知,当引用者不是您的域但可能在网站内部时,它认为没有任何方法可以获得完整的 url。在这里,我认为您需要配置自动重定向 url 以重定向到 paypal 中的https://www.yourdomain.com/register?checkout-token=yourtoken 我会在一段时间内尝试更新完整的代码,可能需要查看 paypal 文档。到那时这可能会有所帮助developer.paypal.com/docs/archive/checkout/how-to/… 我已经设置好了,它在谷歌浏览器而不是 Safari 上都可以运行,这有什么原因吗? 这可能会有所帮助***.com/q/20716439/10140011,我无法确认,因为我不使用 safari。

以上是关于使其只能通过重定向访问 url的主要内容,如果未能解决你的问题,请参考以下文章

登录后的预期 URL 重定向 + 默认重定向?

在 OAuth 重定向 URL 中有访问令牌是否很糟糕

在 PHP 中登录后重定向回来

将所有 HTTP 和 HTTPS 请求重定向到单个 HTTPS URL

“请求的资源只能通过 SSL 访问。”在仅激活 HTTPS 重定向的 Azure 应用上?

nginx动态重定向url