自定义OmniAuth配置Ruby on Rails

时间:2016-04-30 05:45:07

标签: ruby-on-rails omniauth omniauth-facebook omniauth-twitter

在此处阅读本教程。

我在查找有关我要完成的任何信息时遇到问题。

我目前使用自定义用户身份验证设置了rails应用。用户还在数据库中拥有一个角色字符串,用于确定他们在应用程序中看到和可以执行的操作。

      ROLES = %w[non-profit company person]            

    def role_symbols
    [role.to_sym]
     end

在常规注册表单中,用户可以输入姓名,电子邮件地址,用户名和密码。并且还必须选择他们的用户角色。

  Signup.html.erb 
               <h3>Choose Account Type                     </h3>
  <%= f.input :role, :collection => User::ROLES.map { |s| [s.humanize, s] }, required: true, label: false, input_html: { class: 'input-md' } %>

我的目标是通过twitter和facebook omniauth登录表单。当他们点击使用twitter或facebook创建帐户时,我希望用户能够选择他们的角色。目前的omniauth配置我对如何添加自定义选择有点困惑。无论如何,确保用户在创建帐户之前通过链接推特或Facebook帐户来选择角色。

任何帮助都会很棒,谢谢你。

1 个答案:

答案 0 :(得分:0)

让我们看一下oauth流程 - 在这个例子中我们使用facebook,但它可以是任何提供者。

  1. 用户点击指向/auth/facebook的登录链接。
  2. OmniAuth重定向到身份验证对话框https://www.facebook.com/dialog/oauth...
  3. 系统将提示用户授予该应用的权限。他们可以选择接受或拒绝。用户将被重定向回您的应用程序。
  4. 回归&#34;回调&#34;由您的申请处理。通常这将是/auth/callbacks/facebook。您将获得包含信用和用户信息的哈希。您使用它的确切方式以及登录后重定向用户的方式取决于您。
  5. 如果您希望用户向您提供其他详细信息,您可以通过在登录后重定向用户来完成此操作。 但是,您应首先创建用户帐户,然后允许用户提供其他详细信息。虽然技术上可以将凭证存放在某个地方OAuth本身很复杂,所以你不想在auth流程中投入一些额外的步骤。