2

Я пытаюсь перенаправить пользователя после успешного входа в Facebook (не вход).Перенаправление на страницу после Facebook Зарегистрируйтесь

Я хочу перенаправить на /getstarted/welcome после регистрации пользователей в первый раз.

Мой OmniAuth обратный вызов:

def facebook 
     # You need to implement the method below in your model (e.g. app/models/user.rb) 
     @user ||= 
      User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) 

     if @user.persisted? 
      # This will throw if @user is not activated 
      sign_in_and_redirect @user, event: :authentication 
      if is_navigational_format? 
       set_flash_message(:notice, :success, kind: "Facebook") 
      end 
     else 
      session["devise.facebook_data"] = request.env["omniauth.auth"] 
      redirect_to new_user_registration_url 
     end 
    end 

Для завещанию я использую

def after_sign_up_path_for(source) 
    '/getstarted/welcome' 
end 

Мой пользователя Модель:

Facebook Настройки

def self.find_for_facebook_oauth(auth, signed_in_resource = nil) 
    user = User.where(provider: auth.provider, uid: auth.uid).first 
    if user.present? 
     user 
    else 
     user = User.create(first_name:auth.extra.raw_info.first_name, 
              last_name:auth.extra.raw_info.last_name, 
              facebook_link:auth.extra.raw_info.link, 
              user_name:auth.extra.raw_info.name, 
              provider:auth.provider, 
              uid:auth.uid, 
              email:auth.info.email, 
              password:Devise.friendly_token[0,20]) 
    end 
end 

Может кто-то помочь мне установить это ?

+0

так, это работает? если не ошибки? –

+0

Эй, Билли, я попробовал много вариантов, но ничего не работает. Код выше - мой простой контроллер обратных вызовов. Мне нужно, чтобы кто-то помог мне реализовать перенаправление после регистрации FIRST :) –

+0

Вам лучше предоставить ошибки или сложно узнать, что произошло. –

ответ

3

Я решил, добавив к моей модели пользователя

attr_accessor `just_signed_up` 

и установить его в User.find_for_facebook_oauth в этой части блока, в котором я создаю новый пользователь (first_or_create блока).

EDIT: больше объяснений

Таким образом, в Ruby (не Rails) есть метод класса/макро называется attr_accessor (на самом деле Theres также attr_reader и attr_writer, attr_accessor является обобщающим для вызова другого два)

Если вы, в вашей модели пользователя написать

class User 
    attr_accessor :some_attribute 

тогда вы в состоянии выполнить

u = User.first 
u.some_attribute = 'asdf' 
u.some_attribute # => 'asdf' 

, но этот атрибут не будет сохранен в БД, поэтому его можно использовать как временное хранилище некоторого значения в модели Rails.

Другое дело знать, что в Ruby есть только два значения, которые являются false и nil.

Использование этих двух трюков вы можете создать новый пользователь и временно установить этот флаг на объекте

и = User.create u.just_signed_up = верно u.just_signed_up # => верно u.reload! # извлекает запись из DB u.just_signed_up # => nil

и поскольку nil является ложным, эта проверка не будет выполнена для каждого пользователя, кроме тех, которые вы только что создали!

+0

Эй, Майкл, спасибо.Поскольку я довольно новичок в Rails, я не совсем понял это. Не могли бы вы сделать его более дружелюбным? :) –

+0

Хорошо, можете ли вы добавить вопрос к вашему методу 'User.find_for_facebook_oauth' к вопросу? Также проверьте мой расширенный ответ. –

+0

Привет, Майкл, я отредактировал свой вопрос .. –

Смежные вопросы