2017-06-18 9 views
0

ユーザーはomniauth-facebook and DeviseでFacebookにサインアップしてサインインできます。検証が失敗した場合を除いて、うまく動作します。この場合、Deviseの新しい登録ページがロードされますが、エラーメッセージは表示されません。OmniAuthとDeviseで表示されていないエラーの表示をレールで確認できない

フォームのフィールドに入力して登録しようとするとエラーが表示されます。ユーザーがFacebookを使用して登録しようとしたときには表示されません。

モデルの検証エラーを新しい登録フォームに表示するにはどうすればよいですか?

user.rb

validates :username, :email, uniqueness: true 

def self.from_omniauth(auth) 
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user| 
    user.email = auth.info.email 
    user.password = Devise.friendly_token[0,20] 
    user.username = auth.info.name.downcase.gsub(" ", "") 
    user.ensure_username_uniqueness 
    end 
end 

def ensure_username_uniqueness 
    self.username ||= self.email.split("@").first 
    num = 2 
    until(User.find_by(username: self.username).nil?) 
    self.username = "#{username_part}#{num}" 
    num += 1 
    end 
end 

omniauth_callbacks_controller.rb

def facebook 
    @user = User.from_omniauth(request.env["omniauth.auth"]) 

    if @user.persisted? 
    sign_in_and_redirect @user, :event => :authentication 
    set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? 
    else 
    session["devise.facebook_data"] = request.env["omniauth.auth"] 
    redirect_to new_user_registration_url 
    end 
end 

工夫/登録/ new.html.erb

<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <% if object.errors.any? %> 
    <div class="alert alert-danger" role="alert"> 
     These errors occurred: 
     <ul> 
     <% object.errors.full_messages.each do |msg| %> 
      <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="form-inputs"> 
    <%= f.input :username, required: true, autofocus: true %> 
    <%= f.input :email, required: true, autofocus: true %> 
    <%= f.input :password, required: true %> 
    <%= f.input :password_confirmation, required: true %> 
    </div> 

    <%= f.button :submit, "Sign up", :class=>"btn-info" %> 
<% end %> 

答えて

0

は、問題は、私が代わりにリダイレクトを使用していたということでしたレンダリングの

私は変更後:

redirect_to new_user_registration_url 

へ:

render :template => "devise/registrations/new" 

エラーメッセージが示されました。

関連する問題