1

デフォルトでは、intridea / omniauth-identity rails gem は電子メールを使用してログインし、大文字と小文字が区別されます。ログイン電子メールの大文字と小文字を区別しないようにするにはどうすればよいですか? 以下に示すように、「:case_sensitive => false」をモデルに追加しても機能しません。

#models/identity.rb
class Identity < OmniAuth::Identity::Models::ActiveRecord
  attr_accessible :email, :name, :password, :password_confirmation
  validates_presence_of :name
  validates_uniqueness_of :email, :case_sensitive => false
  validates_format_of :email, :with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i
end

たとえば、上記のモデルでも、「bob@aol.com」でサインアップしてから「BOB@aol.com」でログインしようとすると、ログインで無効な資格情報の OMNIAUTH::ERROR が生成されます。

助言がありますか?

4

2 に答える 2

2

わかりましたので、ユーザー ForgetTheNorm には解決策があると思いましたが、locate_conditions を変更するとサインアップが中断されることが判明しました。解決策は、実際には私が当初考えていたよりもはるかに簡単です。フォームで送信する前に、auth-key を小文字にします。これは、キーを使用するすべての場所に当てはまります。たとえば、ログインまたはサインアップします。

  #login-form
  <%= form_tag('/auth/identity/callback', :method => 'post', :id => 'actual-login-form') do %>
    <div class="field">
      <%= label_tag :auth_key, 'Email' %>
      <br />
      <%= text_field_tag :auth_key, nil, :class => 'user-auth-field user-auth-key' %>
    </div>
    <div class="field">
      <%= label_tag :password %>
      <br />
      <%= password_field_tag :password, nil, :class => 'user-auth-field' %>
    </div>
    <div class="actions">
      <%= submit_tag 'Sign in', :class => 'btn-default', :id => 'modal-sign-in' %>
    </div>
  <% end %>

 #signup-form
  <%= form_tag('/auth/identity/register', :method => 'post', :id => 'actual-signup-form') do %>
    <%= label_tag(nil, 'Choose your username') %>
    <%= text_field_tag 'name', nil, :class => 'signup-form-input', :tabindex => '1' %>

    <%= label_tag(:email, 'Your current email address') %>
    <%= text_field_tag 'email', nil, :class => 'signup-form-input user-auth-key', :tabindex => '2' %>

    <%= label_tag(:password, 'Create a password') %>
    <input type="password" name="password" id="password" class="signup-form-input" tabindex="3" />

    <%= label_tag(:password2, 'Confirm your password') %>
    <input type="password" name="password_confirmation" id="password_confirmation" class="signup-form-input" tabindex="4" />

    <%= submit_tag('Sign Up for Pholder', :id => 'signup-submit', :tabindex => '5') %>
  <% end %>

関連する jQuery/JS:

 $('#actual-login-form, #actual-signup-form').on('submit', function(){

   //lower case auth key (email addresses) for all user validation
 $(this).find('.user-auth-key').val( $(this).find('.user-auth-key').val().toLowerCase()  )

})
于 2013-04-11T23:45:42.717 に答える
1

で解決策を見つけることができます

https://github.com/intridea/omniauth-identity/issues/22

間違いがないように...

#config/initializers/omniauth.rb
provider :identity, locate_conditions: lambda { |req| 
   { model.auth_key => req['auth_key'].downcase }
}

ujeezy が前述したように、Rubygems の omniauth-identity gem はこの機能をサポートしていませんが、これは依然として当てはまります。あなたのgemfileが彼が述べたとおりであることを確認してください:

#Gemfile
gem 'omniauth-identity', git: 'https://github.com/intridea/omniauth-identity.git'
于 2013-04-08T10:25:42.930 に答える