我在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
答案 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
模型。
希望您在User
和Donater
之间设置关联。然后您可以将代码更改为:
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