我正在尝试做的概述是根据用户的要求向用户重新发送“激活帐户”电子邮件。基本上,用户注册并发送激活电子邮件,这完美地工作。以下是用户模型中的代码,用于在创建临时用户时发送激活电子邮件:
def deliver_activation(invitation = nil)
Mailer.activation(self, invitation).deliver
end
我希望能够为用户提供一种方法,让用户点击链接重新发送激活,如果他们丢失或从未因任何原因收到激活。如果用户尝试在未先激活的情况下登录,则我网站上的页面会告诉他们尚未激活。我想为他们提供一个链接,点击以重新发送该激活电子邮件,如下所示:
<%= link_to "click here to resend" %>
我只是不确定这样做的安全/最佳方式是什么。如果通过带有user_id的POST来发送电子邮件,则向所有用户发送激活链接的人员可以使用。如何允许用户重新发送电子邮件?我假设我必须向我的一个控制器添加一些东西来触发我的模型中的deliver_activation动作...但我不知道如何。
答案 0 :(得分:0)
如果您将当前用户ID存储在会话变量中,那么您可以使用简单的控制器GET操作和重定向来发送电子邮件,la:
def deliver_activation(invitation = nil)
user = @current_user
Mailer.activation(user, invitation).deliver
redirect_to "wherever you want to send them to"
end
这样,只有登录的用户才能向自己发送激活电子邮件。这有意义吗?
希望这有帮助
class ApplicationController < ActionController::Base
protected
helper_method :current_user
def current_user
if session[:user_id]
@current_user ||= User.find(session[:user_id])
end
end
def current_user=(user)
@current_user = user
session[:user_id] = user.id
end
end
答案 1 :(得分:0)
为什么不让用户使用他们创建的login / pwd登录,然后在数据库中维护一个'status'字段,指示该用户是否已激活他/她的帐户。如果没有,请在网站上显示一个链接:
“请通过我们发送给您的电子邮件激活您的帐户,如果您丢失了,请点击此处重新发送激活码”。