2016-10-29 25 views
0

我有一個使用Devise的應用程序,我希望在用戶註冊後將它們定向到特定頁面,此頁面調用一個API並保存該值從API中,我需要此頁面在用戶完成註冊表單並單擊提交後纔可訪問或可用,然後重定向到此頁面。註冊後只顯示一次 - Ruby on Rails

我不希望這個頁面或URL以任何其他方式訪問,但註冊後,因爲如果再次訪問API將發送一個新的值。我怎樣才能做到這一點?

一旦用戶註冊後,他們將被重定向到調用API頁面:

def after_sign_up_path_for(resource) 
    api_call_path ##path that can only be accessed after sign_up 
end 

的API調用,一旦網頁被打開從JSON數據的響應被自動保存到數據庫中,如果頁面再次打開,新的數據將被接收到新的JSON響應,這是我想避免的。

所以簡而言之,我的問題是如何限制對特定路徑的訪問,並且只有在用戶完成註冊表單(設計)時纔可以訪問該路徑或者是否可以運行在通過用戶模型創建用戶之後,來自控制器的代碼使用回調/過濾器?

+0

取決於很多因素,這個api調用是否需要用戶的任何輸入?更具體的細節,你可以提供更有用的答案,你會得到。 – max

回答

1

我只是忙於類似的事情。您不需要將用戶引導至頁面來運行代碼,只需運行用戶第一次登錄後需要運行的代碼即可。

你需要創建一個會話控制器,並創建一個檢查,如果用戶在之前已經登錄條件語句:

#config/routes.rb 
devise_for :users, controllers: { sessions: "sessions" } 

#app/controllers/sessions_controller.rb 
class SessionsController < Devise::SessionsController 

    def after_sign_in_path_for(resource) 
    if resource.sign_in_count == 1 
     ##Do something awesome 
    else 
     root_path 
    end 
    end 
end 

靈光建議您可以檢查futher在Devise Controllers信息。

0

讓我們把sign_up後顯示特定頁面的時刻 - 狀態A.所以,你需要知道具體的頁面控制器 - 處於狀態A.用戶可以通過

1)實現它在顯示特定頁面(您可以通過客戶端觸發的重置以確保顯示頁面)後註冊並重置狀態後,將用戶保存到數據庫(服務器端)。

2)註冊後保存到cookies(客戶端),然後按照上述操作。

第二種解決方案是在我看來更乾淨,但我不知道如何嚴格是通過發行

rails generate devise:controllers [scope] 

然後自定義UsersController這樣,只顯示一次

+0

Cookie隨時可以被用戶銷燬。不要相信cookie。 – max

+0

@max這就是爲什麼我認爲一旦顯示規則的重要性。如果它只是「歡迎」頁面,我認爲沒有任何害處,表明它是太有用的,故意希望通過刪除cookie再次看到它 –

0

您可以自定義設計用戶控制規則用戶保存後,你可以打電話給你的API代碼有 如

def create 
    @user = .... 
    if @user.save 
    @user.call_api_method() 
    else 
    ...... 
    end 
end 

有關更多信息,請Configuring controllers