0

我正在使用 Omniauth 让用户注册 Facebook 帐户。当他们第一次点击 auth 链接时,我会将他们引导到注册页面,让他们输入一些额外的信息,除非他们已经有我的应用程序的帐户。

会话控制器

 def create_facebook
        #make an environment variable
        auth = request.env['omniauth.auth']
        if User.find_by_provider_and_uid(auth["provider"], auth["uid"])
            user = User.find_by_provider_and_uid(auth["provider"], auth["uid"])
            session[:user_id] = user.id
            redirect_to lessons_path, flash[:notice] => "Signed in!"
        else
            #go to signup page to get additional info
            redirect_to new_user_path(:auth => auth) #problem
        end
  end

在这种情况下,我使用 URL 中的参数传递整个 auth 哈希,因为我想调用User.create_with_omniauth(auth). Users#new我应该避免这样做吗?其他选择是什么?

4

1 回答 1

0

你有一些我可以看到的方法:

  • 将 auth 值存储在用户的会话中(但请记住,会话默认情况下不会加密值;它只会对其进行签名),然后在查看新用户操作时将其拉出。

或者:

  • 只需直接调用新的用户操作代码(通过帮助程序共享它,或者如果它在同一个控制器上 - 调用操作,然后确保调用render以设置正确的视图)

第三种更强大的替代方案,类似于会话方法,但更重量级:

  • 使用您在此步骤中拥有的信息设置用户(并将其设置为某种“部分注册”状态)。让他们登录。然后确保在查看 new_user 操作时读入任何现有数据。可能还希望设置您的路由层以始终将处于此状态的用户重定向到注册页面,无论他们在哪里。
于 2013-01-27T00:36:29.857 回答