gpt4 book ai didi

ruby-on-rails - 如何在 Rails 中生成类似确认页面的临时页面?

转载 作者:数据小太阳 更新时间:2023-10-29 07:55:12 28 4
gpt4 key购买 nike

我正在使用设计并希望在注册时将用户重定向到确认页面,这就是我现在正在做的:

users/registrations_controller.html.erb

class Users::RegistrationsController < Devise::RegistrationsController

def confirm_email
end

private

def after_inactive_sign_up_path_for(resource)
users_confirmyouremail_path
end
end

配置/routes.rb

devise_scope :user do     
get 'users/confirmyouremail' => 'users/registrations#confirm_email'
end

注册后重定向页面没有问题。但是,我认为任何人都可以访问带有“host.com/confirmyouremail”之类的 url 的页面并看到确认页面,这很奇怪。有什么方法可以编写一条使用仅允许一次访问的随机代码的路线吗?提前致谢。

最佳答案

也许是这样的:

before_action :authenticate_user!

def confirm_mail
redirect_to root_path if current_user.confirmed
...
end

如果用户已经确认了他的帐户,那么您正在将其存储在数据库中。如果他的帐户得到确认,那么他将无法访问此页面。您可以重定向到任何您想要的页面。由于之前的操作,没有任何帐户的用户将无法访问此页面

如果用户在访问此 confirm_mail 页面时未登录,则您有不同的可能性。您可以使用 session 或 cookie:

# after sign up:
session[:confirm] = true
# alternatively a cookie
cookies[:confirm] = true

然后在确认邮件操作中:

def confirm_mail
if session[:confirm].blank? # or cookies[:confirm].blank?
redirect_to root_path
end

# otherwise delete the field from the session
session.delete(:confirm)
# alternatively the cookie
cookies.delete(:confirm)
end

另一种方法是使用 token 。您创建一个新模型,例如 ConfirmMailToken。然后在注册时创建一个新 token 并将用户重定向到确认页面,并将 token 作为 URL 参数。然后在 confirm_mail 操作中检查 token 是否可用,如果可用则将其删除。这样您就可以确保页面仅在重定向后显示。

关于ruby-on-rails - 如何在 Rails 中生成类似确认页面的临时页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38124326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com