2011-03-20 60 views
3

語境Rails的辦法限制頁訪問沒有會話

我在http://hivechatter.com建立一個超級簡單的,敲你的襪斷性感註冊頁面。 (是的,我對她很感興趣。)

根頁面是新的用戶操作,我只需要電子郵件。如果訪問者提交了有效的電子郵件,則會創建一個新用戶,並重定向到該用戶的編輯頁面並要求提供其他可選信息。

問題

編輯頁面的網址是通常的形式:http://hivechatter.com/users/19/edit。用戶可以通過訪問任何用戶的編輯頁面,只需訪問他們選擇的任何編號。

問題

如何限制訪問用戶編輯頁面,以便它只能在創建了從根新的用戶頁面USER_ID後去過一次,只有立刻?

我可以想到各種探索方法。我會很欣賞最優雅的,軌道上的指針來做到這一點。請注意,我不需要任何其他功能,如會話等。這兩步註冊過程是我現在需要的程度。

謝謝!

回答

2

將新列添加到您的用戶表中。讓它成爲opened_once:boolean與DEFAULT false

然後在你的users_controller

def edit 
    @user = User.find(params[:id], :conditions => ['opened_once => ?', false]) rescue ActiveRecord::RecordNotFound 
    @user.update_attribute :opened_once, true 
    ... 
end 

所以現在可以顯示只有當你重定向到編輯頁面

UPD創建新用戶後,一旦權

你可以做更多的Rails方式?不需要添加新的東西到你的數據庫等等。您可以在所有刪除您edit行動,所以你的編輯視圖將在創建渲染:如果驗證通過,他的個人資料創建

def create 
    @user = User.new params[:user] 
    respond_to do |format| 
    if @user.save 
     format.html{ render :action => :edit } 
    else 
     format.html{ render :action => :new } 
    end 
    end 
end 

用戶將看到編輯表格只有一次。

因此,這是特定"Rails way" :)

+0

這很容易,儘管它感覺像一個黑客。我想沒有「鐵軌方式」來處理這個問題。謝謝! – 2011-03-21 00:00:10

+0

我已經更新了我的答案,以顯示更多的Rails詳細信息 – fl00r 2011-03-21 08:49:18

+0

這正是我所尋找的解決方案。謝謝! – 2011-03-21 22:58:37

0

cookie的要點是以會話的形式維護狀態。 HTTP規範是無狀態的,如果你有人登錄,那麼他們需要一個會話。 RoR有一個很棒的會話處理程序,我推薦使用它。

限制訪問的唯一方法是使用.htaccess文件或類似的方法做basic-auth。這不能很好地擴展並且不太安全。

+0

的是完整版我的工作確實有會議,基於Cookie的身份驗證等。對於註冊網頁,我在尋找一個簡單的方法來限制訪問編輯頁面,而不是完整的登錄功能。 – 2011-03-20 23:55:33

+0

@Tim Koelkebeck說實話我沒有看到你怎麼能有任何形式的限制/認證沒有國家。 – rook 2011-03-20 23:58:54

+0

Rook - 你有沒有看到上面的答案?他建議爲模型添加一個標誌。這是一個狀態,但比基於cookie的狀態更容易實現。當然,這有點破綻,但由於這只是一個臨時註冊頁面,簡單性使其成爲最佳選擇。 – 2011-03-21 00:07:24

相關問題