Ich benutze Scala bCrypt wrapper zum Verschlüsseln von Benutzerkennwort, bietet dieser Wrapper eine implizite Klasse.Scala Implizite Klasse Mitglied ist nicht zugänglich in Objekt
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()
}
Aber ich bin ein seltsames Problem konfrontiert, wenn ich diese Implizite converision in Klasse bin mit es workes in Ordnung, aber converiosn funktioniert nicht mit Objekt oder Fallklassen.
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>
Ich bin mir nicht sicher, was ich hier falsch mache.
Ok, so stellt sich heraus, es war Kollision von „Password“ als Kennung verursacht wurde diese Kompilierungsfehler, funktioniert es nur durch Ändern dieser Anweisung import com.github.t3hnar.bcrypt. {Password => BcryptUtil} –