ユーザパスワードの暗号化にScala bCrypt wrapperを使用しています。このラッパーは暗黙のクラスを提供します。Scala暗黙のクラスメンバにオブジェクト内でアクセスできない
package object bcrypt {
implicit class Password(val pswrd: String) extends AnyVal {
def bcrypt: String = B.hashpw(pswrd, BCrypt.gensalt())
def bcrypt(rounds: Int): String = B.hashpw(pswrd, BCrypt.gensalt(rounds))
def bcrypt(salt: String): String = B.hashpw(pswrd, salt)
def isBcrypted(hash: String): Boolean = B.checkpw(pswrd, hash)
}
def generateSalt: String = B.gensalt()
}
しかし、私はクラスにこの暗黙converisionを使用していたときに私はそれがオブジェクトまたはケースクラスと罰金が、converiosn doesntの仕事をworkes、奇妙な問題に直面しています。
scala> import com.github.t3hnar.bcrypt._
import com.github.t3hnar.bcrypt._
scala> class Password(secret: String) {
| def validate(userSecret: String): Boolean = userSecret.isBcrypted(secret)
|
| override def toString = secret
| }
defined class Password
scala> object Password {
| def apply(secret: String): Password = new Password(secret)
|
| def getEncrypted(secret: String) = new Password(secret.bcrypt)
| }
<console>:18: error: value bcrypt is not a member of String
def getEncrypted(secret: String) = new Password(secret.bcrypt)
^
scala>
ここで間違っていることはわかりません。
オクラホマので、識別子がこれを引き起こしていたとして、それは「パスワード」の衝突だっ判明この文を変更するだけで動作しますimport com.github.t3hnar.bcrypt。{Password => BcryptUtil} –