Redirect to Page after Facebook Sign Up

时间秒杀一切 提交于 2019-12-09 21:15:00

问题


I'm trying to Redirect a user after successful Facebook SIGN UP (not sign in).

I want to redirect to /getstarted/welcome after a user Registers for the first time.

My omniauth callback is :

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

For devise i use

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

My User Model:

Facebook Settings

  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

Can someone help me set this up ?


回答1:


I solved it by adding to my User model

attr_accessor `just_signed_up`

and setting it in User.find_for_facebook_oauth in this part of the block where I create a new user (first_or_create block).

EDIT: more explanation

So in Ruby (not Rails) there is a class method/macro called attr_accessor (actually theres also attr_reader and attr_writer, attr_accessor is a shorthand for calling the other two)

If you, in your User model write

class User
  attr_accessor :some_attribute

then you're able to perform

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

but this attribute is not going to be saved to DB, so it may be used as a temporary storage of some value in Rails model.

Another thing to know is that there are only two "values" that are false in Ruby, those are false and nil.

Using those two tricks you may create a new user and temporarily set this flag on the object

u = User.create u.just_signed_up = true u.just_signed_up # => true u.reload! # fetches record from DB u.just_signed_up # => nil

and since nil is false, this check will fail for every user except for ones you just created!



来源:https://stackoverflow.com/questions/18597470/redirect-to-page-after-facebook-sign-up

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!