2

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

誰かがこれを設定するのを手伝ってくれますか?

4

1 に答える 1

3

User モデルに追加して解決しました

attr_accessor `just_signed_up`

User.find_for_facebook_oauth新しいユーザーを作成するブロックのこの部分に設定します(first_or_createブロック)。

編集:詳細説明

そのため、Ruby (Rails ではありません) には、呼び出されるクラス メソッド/マクロがありますattr_accessor(実際には theres もattr_readerありattr_writerattr_accessorは他の 2 つを呼び出すための省略形です)。

あなたの User モデルで

class User
  attr_accessor :some_attribute

その後、あなたは実行することができます

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

ただし、この属性は DB には保存されないため、Rails モデルで何らかの値を一時的に格納するために使用できます。

もう 1 つ知っておくべきことは、Ruby では false である "値" は と の 2 つだけだということfalseですnil

これらの 2 つのトリックを使用して、新しいユーザーを作成し、オブジェクトにこのフラグを一時的に設定できます。

u = User.create u.just_signed_up = true u.just_signed_up # => true u.reload! # DB からレコードをフェッチする u.just_signed_up # => nil

nil は false であるため、作成したばかりのユーザーを除くすべてのユーザーに対して、このチェックは失敗します。

于 2013-09-03T17:03:07.233 に答える