Анонимные пользователи с Devise? - PullRequest
4 голосов
/ 18 июля 2011

Если я хочу построить чат с рельсами (канонический случай) с выбором анонимного ('выберите псевдоним') и авторизованного (u / n & pw), как бы я создал это с Devise?

У меня успешно работает Devise в последнем случае, это анонимная часть (создание и поддержка сеанса), с которой я борюсь.

Ответы [ 4 ]

8 голосов
/ 05 мая 2012

На самом деле для этого есть вики-страница Devise, только они называют ее Гость:

Как: создать гостевого пользователя

5 голосов
/ 18 июля 2011

используйте дополнительный 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
4 голосов
/ 12 сентября 2012

Другим вариантом является не входить в систему гостевого пользователя, но сделать так, чтобы 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 => "#{token@example.com}")
  user.save(:validate => false)                                               
  user                                                                        
end   
1 голос
/ 18 июля 2011
#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

Затем вы можете удалить запись, когда она подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...