class AuthenticationsController < ApplicationController def create auth = request.env[“omniauth.auth”] user = User.find_by_provider_and_uid(auth[“provider”], auth[“uid”]) || User.create_with_omniauth(auth) sign_in_and_redirect(:user, user)
Add the line in bold to redirect!
If you are using Devise as the authentication for your Ruby On Rails application and you are looking to implement OmniAuth, that allow the users to login with their Facebook or Google Account.
But once you have all the codes and omniauth setup, on creation you will hit the following error:
Validation Failed: Email and Password cannot be blank. Background
The issue here is that the Devise model that you are working with will have the following :validatable added as part of the model. This is to validate that the database authentication have both the email and password before creation of the account.
But with omniauth, we may not get the email or do the user need the password to login, they simply use the relevant account for the different providers, such as Twitter, Facebook or Google to login.
We will need to overwrite the default Devise validation. Using the following methods below. Just copy them to your model and you should be good.
def email_required? super && provider.blank? end def password_required? super && provider.blank? end
Note : provider is a field or column in your model.
Validation failed: Password can’t be blank