OmniAuth和Devise,如何设置可选密码

Dav*_*vid 5 passwords rubygems ruby-on-rails devise omniauth

我正在使用OmniAuthDevise来验证用户身份.我希望使用OmniAuth提供商注册的用户能够设置可选密码(API身份验证所需),但我遇到了问题.

如果用户通过OmniAuth创建帐户并尝试设置密码,则会收到以下错误:

BCrypt::Errors::InvalidHash in RegistrationsController#update
Run Code Online (Sandbox Code Playgroud)

我相信这是因为密码是空白的.这有什么好办法?我考虑过生成一个随机密码,但这种方法的问题是用户需要知道当前密码才能编辑设置.

编辑:我看过允许用户更改设置而不需要当前密码,这就是我想要做的事情,只有当用户最初没有密码时.

And*_*one 5

另一种方法是将以下内容添加到"用户"模型类中,以便在没有要验证的密码时绕过密码验证,其中provider是使用外部身份验证时设置的某个字段.

def valid_password?(password)  
  !provider.nil? || super(password)  
end
Run Code Online (Sandbox Code Playgroud)


jte*_*sch 3

我想您不想要简单的方法,如果他们想设置密码,只需重置密码?

user.send_reset_password_instructions