2013-12-10 76 views
1

我在軌道上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

我剛剛測試了我的應用程序和rails 3.2應用程序,使用devise和在Heroku上運行。我也遇到了同樣的情況,我剛剛從控制檯發送Heroku命令時也遇到了麻煩,但這只是解決了問題。 – RustyToms

+1

我想我想出了我的問題,也許你的問題很相似。我正在對用戶進行身份驗證,但是我從URL中的信息獲取模型。所以如果你已經登錄,你可以發送來自任何網址的請求並獲取該信息。這是我的糟糕的設計。我正在修改我的應用程序,只通過與當前登錄用戶的關聯來搜索模型。我會告訴你,如果這對我有用。 – RustyToms

+0

爲我修好了。如果其他人遇到同樣的問題,我會發佈一個答案。 @PatMarx,如果這不能解決你的問題,你可能需要發佈更多的代碼,比如你在哪個控制器中,以及那個控制器的模型文件,甚至是你的模式。 – RustyToms

回答

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 

您檢查,看看用戶是否登錄,但隨後你就可以抓取URL中的信息和提供的任何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 
+0

我相信我的原始問題來自'current_user'方法返回或持續被設置爲X,第一個經過身份驗證的用戶。也就是說,解決方案巧合地對我的另一個問題非常有幫助,所以非常感謝! –

+0

我會看看我是否可以評估其他代碼是否有用,並進行編輯以添加它。 –

+0

好吧,我搞砸了一些代碼,'除非'應該是'if'。 DERP。現在已經修復了。 – RustyToms