我们在 devise.rb 中使用以下内容
config.encryptor = :bcrypt
Run Code Online (Sandbox Code Playgroud)
我们想将其更改为
config.encryptor = :authlogic_sha512
Run Code Online (Sandbox Code Playgroud)
还编写了代码来解密旧密码并在登录时将其哈希为新密码(在会话控制器内)
但是,更新密码后,注销并登录时出现错误
BCrypt::Errors::InvalidHash (invalid hash):
Run Code Online (Sandbox Code Playgroud)
如果我注释掉错误的原始点,此错误会随机出现。所以我认为设备配置或 user.rb 模型有问题。
用户模型有以下行:
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:auth0, :google_oauth2]
Run Code Online (Sandbox Code Playgroud)
所以步骤顺序是这样的:
知道这里可能有什么问题吗?提前致谢。
编辑:根据要求执行上述步骤 2 的代码:
class Users::SessionsController < Devise::SessionsController
...
...
email = params[:user]['login']
@user = User.find_by_email(email)
return if @user.nil?
# Get old password and salt
bcrypt = BCrypt::Password.new(@user.encrypted_password)
salt = bcrypt.salt
pwd = params[:user]['password']
pass …Run Code Online (Sandbox Code Playgroud) 我有一个作为 cron 运行的 java 应用程序。它使用MyBatis。在我的 mybatis-config.xml 中,我有
<environments default="staging">
<environment id="prod_read">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.10.2:3306/myDB"/>
<property name="username" value="dbuser"/>
<property name="password" value="dbpass"/>
</dataSource>
</environment>
<environment id="prod_write">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.10.1:3306/myDB"/>
<property name="username" value="dbuser"/>
<property name="password" value="dbpass"/>
</dataSource>
</environment>
<environment id="staging">.....
</environments>
Run Code Online (Sandbox Code Playgroud)
因此,我在生产中使用 2 个 DB - 一个用于读从属,一个用于写主。
代码中,SqlSessionFactory的初始化是这样的
InputStream rd = this.getClass().getClassLoader()
.getResourceAsStream(mybatisConfigXml);
try {
sessionFactory_read = new SqlSessionFactoryBuilder().build(rd, Main.DB_ENV + "_read");
sessionFactory_write = new SqlSessionFactoryBuilder().build(rd, Main.DB_ENV + "_write"); …Run Code Online (Sandbox Code Playgroud) 我的班级看起来像这样:
public Class A {
private static final ObjectMapper mapper = new ObjectMapper();
public String get(String key) {
JsonNode nod = mapper.readTree(getFromCache(key));
}
}
Run Code Online (Sandbox Code Playgroud)
多个线程将访问此方法.我需要同步它吗?我是否需要在方法中移动映射器?