ho qualche convalida della password per il mio modello User
, e un metodo create_with_omniauth
per ottenere le informazioni dal account Facebook dell'utente:Come aggirare la convalida della password nel seguente metodo di accesso OmniAuth?
user.rb:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, presence: true, length: { minimum: 6 }
validates :password_confirmation, presence: true
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["info"]["name"]
user.email = auth["info"]["email"]
end
end
end
Ora, quando clicco link_to "Sign in with Facebook, "auth/facebook"
ottengo questo errore:
Validation failed: Password can't be blank, Password can't be blank, Password is too short (minimum is 6 characters), Password confirmation can't be blank
a causa di queste due linee nel modello User
:
validates :password, presence: true, length: { minimum: 6 }
validates :password_confirmation, presence: true
Come ignorare tale convalida quando l'utente tenta di accedere con il metodo di accesso OmniAuth?
Hey, grazie per i suggerimenti! Scusa, sono un principiante di Rails. Potresti fornirmi un esempio del codice per generare la password casuale quando l'utente fa clic su Facebook? – alexchenco
self.password = self.password_confirmation = SecureRandom.urlsafe_base64 (n = 6) –
Grazie! Quindi dovrebbe andare nel metodo 'self.create_with_omniauth'? Non dovrebbe essere quindi 'user.password'? – alexchenco