为参数值传递一个长字符串

时间:2013-01-26 23:37:03

标签: ruby-on-rails parameters omniauth

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

SessionsController

 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。我应该避免这样做吗?还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

我可以看到一些方法:

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

可替换地:

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

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

  • 使用此步骤中的信息设置用户(并将其设置为某种“部分注册”状态)。登录。然后确保在查看new_user操作时读入任何现有数据。可能还需要设置路由层,以便始终将处于此状态的用户重定向到注册页面,无论他们身在何处。