簡體   English   中英

Facebook注冊后重定向到頁面

[英]Redirect to Page after Facebook Sign Up

我正在嘗試在成功完成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

有人可以幫我設置這個嗎?

我通過添加到我的用戶模型中解決了

attr_accessor `just_signed_up`

和設置在它User.find_for_facebook_oauth在創建一個新用戶(塊的這部分first_or_create塊)。

編輯:更多說明

因此,在Ruby(不是Rails)中,有一個稱為attr_accessor的類方法/宏(實際上也有attr_readerattr_writerattr_accessor是調用其他兩個的簡寫)

如果您在用戶模型中寫

class User
  attr_accessor :some_attribute

這樣你就可以執行

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

但是此屬性不會保存到DB,因此可以用作Rails模型中某些值的臨時存儲。

要知道的另一件事是,在Ruby中只有兩個“ false”值是false,即falsenil

使用這兩個技巧,您可以創建一個新用戶並在對象上臨時設置此標志

u = User.create u.just_signed_up = true u.just_signed_up#=> true u.reload! #從數據庫u.just_signed_up獲取記錄#=> nil

並且由於nil為假,因此除您剛剛創建的用戶外,此檢查對所有用戶都將失敗!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM