2014-08-29 79 views
0

所以我有這個應用程序,我正在用戶在註冊後輸入他們的信息後有配置文件。Rails如何以設計方式登錄訪客用戶

目前我正在嘗試添加一項功能,允許新的未註冊用戶訪問個人資料,以便在他們需要註冊之前查看應用程序的樣子(我正在計劃對其進行「嘗試免費「按鈕home_controller#index動作對於身份驗證,我使用的設計寶石

目前,我已經看過Railscast(393)在這個,但我不明白(幾個小時後嘗試)如何實現訪客用戶並使用Devise將其登錄

我也讀過關於SO的4種不同的解決方案,並決定堅持這一項(how to create a guest user in Rails 3 + Devise):

class ApplicationController < ActionController::Base 
    def current_user 
     super || guest_user 
    end 

    private 

    def guest_user 
    User.find(session[:guest_user_id].nil? ? session[:guest_user_id] = create_guest_user.id : session[:guest_user_id]) 
    end 

    def create_guest_user 
     u = User.create(:name => "guest", :email => "guest_#{Time.now.to_i}#{rand(99)}@example.com") 
     u.save(:validate => false) 
     u 
    end 

... 
end 

我有這個在我的application_controller.rb不明白,我怎麼會用這些功能在home_controller#索引創建來賓用戶並登錄到配置文件時的「實戰」按鍵。

我已經試過手動創建user,節約其不進行驗證,然後使用鏈路設計的sign_in方法,像這樣:<a href="<%= sign_in(:user, some_guest_user) %>">Try it!</a>也試過 <a href="<%= profile_path %>">Try it!</a>

我想這一點,但輪廓拋出一些驗證消息說我需要登錄才能查看。我也嘗試刪除before_filter authenticate!profiles_controller,但我似乎無法得到這個工作。

有人會知道如何創建一個用戶點擊按鈕,並自動登錄到訪客配置文件?非常感謝任何幫助,我完全迷失在這裏。

+0

嗨,你是否能夠實現這種功能?我也試圖做同樣的事情。請儘可能分享您的實施。 – 2017-07-08 19:12:23

+0

@VieenaySiingh我在下面實現了一個選定答案的變體,並添加了一個查詢參數'?​​is_guest = true'來爲特定功能添加特定的訪客功能 – karysto 2017-07-24 21:43:41

回答

1

我想你對訪客用戶有什麼誤解。你說你想讓訪客用戶自動登錄,這是錯誤的。訪客用戶無法登錄,因爲...呃,因爲他們是客人。你想創建它們,但沒有簽字。

這就是爲什麼你想在你的ApplicationController這些輔助方法,因爲當你嘗試獲得current_user,如果不存在(nil),你將有回退(這就是爲什麼您使用||運營商),這將分配guest_user作爲current_user

因此,忘記爲訪客用戶使用sign_in鏈接,你應該沒問題。

+0

感謝您解決這個問題,我真的很困惑。所以來賓用戶不登錄?你的說明很好,但是現在我還有一個問題,如果訪客用戶不是這樣做的,那麼如何進入用戶配置文件來嘗試應用程序(因爲所有功能都來自他們的配置文件)?再次感謝btw – karysto 2014-08-29 05:55:06

+0

您可以讓訪客用戶註冊,您可以使用此gem rails_temporary_data存儲爲訪客用戶收集的臨時數據,然後對其進行簽名。 – 2014-08-29 07:03:37

+0

我實際上有一個使用會話的註冊嚮導,但這看起來很棒!感謝您向我展示這顆寶石,我會盡力而爲 – karysto 2014-08-29 14:31:15

相關問題