如何安全地从用户link_to点击运行模型操作?

时间:2012-01-17 21:42:17

标签: ruby-on-rails

我正在尝试做的概述是根据用户的要求向用户重新发送“激活帐户”电子邮件。基本上,用户注册并发送激活电子邮件,这完美地工作。以下是用户模型中的代码,用于在创建临时用户时发送激活电子邮件:

  def deliver_activation(invitation = nil)
    Mailer.activation(self, invitation).deliver
  end

我希望能够为用户提供一种方法,让用户点击链接重新发送激活,如果他们丢失或从未因任何原因收到激活。如果用户尝试在未先激活的情况下登录,则我网站上的页面会告诉他们尚未激活。我想为他们提供一个链接,点击以重新发送该激活电子邮件,如下所示:

<%= link_to "click here to resend" %>

我只是不确定这样做的安全/最佳方式是什么。如果通过带有user_id的POST来发送电子邮件,则向所有用户发送激活链接的人员可以使用。如何允许用户重新发送电子邮件?我假设我必须向我的一个控制器添加一些东西来触发我的模型中的deliver_activation动作...但我不知道如何。

2 个答案:

答案 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'字段,指示该用户是否已激活他/她的帐户。如果没有,请在网站上显示一个链接:

“请通过我们发送给您的电子邮件激活您的帐户,如果您丢失了,请点击此处重新发送激活码”。