设计登录用户持久保存到其他帐户

时间:2013-12-10 18:29:45

标签: ruby-on-rails ruby-on-rails-3 heroku devise

我在rails 3.2上遇到了设计问题

在heroku上,我会让某人(X)使用他们的Twitter帐户登录,这可以正常工作并验证他们。如果用户未通过Twitter登录,则会限制某些页面。我的问题是,一旦X登录,另一个人Y,使用不同的计算机并且没有通过Twitter登录,将访问这些页面并且已经自动登录为X.有什么想法会发生这种情况吗?我不确定要发布哪个代码,但这里是控制器中页面的方法。

before_filter :authenticate_user!

def show
    @donater = Donater.find(params[:id])
    twitter_id_str = current_user.authentications.find_by_provider(:twitter).uid
    @current_user_twitter_handle = get_twitter_handle_from_id(twitter_id_str.to_i).screen_name
end

1 个答案:

答案 0 :(得分:1)

如果您希望用户只能找到与该用户帐户关联的Donater模型,则需要通过当前登录用户的帐户检索该Donater模型。

这是你的代码:

def show
    @donater = Donater.find(params[:id])
    twitter_id_str = current_user.authentications.find_by_provider(:twitter).uid
    @current_user_twitter_handle = get_twitter_handle_from_id(twitter_id_str.to_i).screen_name
end

您正在检查用户是否已登录,但您只是从网址抓取信息并提供您找到的任何Donater模型。这允许登录的任何人访问任何Donater模型。

希望您在UserDonater之间设置关联。然后您可以将代码更改为:

def show
    @donater = Donater.find(params[:id]).where(user_id: current_user.id) # modify for your specific situation
    if @donater.empty?
      render text: "Not Found or Access Denied" # replace this with a redirect or whatever based on your needs
      return
    end
    twitter_id_str = current_user.authentications.find_by_provider(:twitter).uid
    @current_user_twitter_handle = get_twitter_handle_from_id(twitter_id_str.to_i).screen_name
end