2011-07-18 12 views
4

匿名(「ニックネームを選んでください」)と許可されている(u/n & pw)という選択肢を持つチャットルームを(標準的なケースで)ビルドしたいのであれば、私はどのようにDeviseでビルドしますか?Deviseの匿名ユーザーですか?

私はDeviseが後者の場合にうまく働いています。それは匿名の部分です(&のセッションを作成します)。私は苦労しています。

答えて

5

セットアップ匿名ユーザーに使用余分before_filterは、例えば、

def anonymous_sign_in 
    return if user_signed_in? 
    u = User.new(:type => 'anonymous') 
    u.save(:validate => false) 
    sign_in :user, u 
end 
+1

これはdevis sign_inメソッドの後にどのように呼び出されるのですか? – Bryan

1
#user.rb 
    # Creates an anonymous user. An anonymous user is basically an auto-generated 
    # +User+ account that is created for the customer behind the scenes and its 
    # completely transparently to the customer. 
    def anonymous!(nickname) 
     temp_token = SecureRandom.base64(15).tr('+/=', 'xyz') 
     usr = ::User.new(email: "#{temp_token}@example.net", password: temp_token, password_confirmation: temp_token, nickname: nickname) 
     usr.save!(validate: false) 
     usr 
    end 

このレコードは、適切な場合に削除することができます。

8

は、そのための工夫のWikiページには、実際に存在し、彼らだけではゲストユーザーにそれを呼び出す:

How To: Create a guest user

4

別のオプションゲストユーザにサインインするのではなく、サインインされていないユーザがいる場合にcurrent_userにゲストユーザを返すようにします。

ユーザがサインインしていない場合、current_userはゲストユーザを返します。したがって、サインインせずにアクセスできるコントローラにはフィルタ前にauthenticate_user!は必要ありません。

def current_user                
    super || guest_user               
end                   

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               
    token = SecureRandom.base64(15)            
    user = User.new(:first_name => "anonymous", :last_name => 'user', :password => token, :email => "#{[email protected]}") 
    user.save(:validate => false)            
    user                   
end 
関連する問題