2017-06-14 5 views
1

GolangのAPIで作業しています.GormをORMとして使用しています。その後、私はそのリソースを保存して読むためのメソッドを持っているので、私はそれを保存値が異なるデータベースからGolangにbyte []を保存して読み込みます。

type Member struct { 
    MyField    []byte  `gorm:"column:MyField" schema:"-"` 
} 

:現在、[]バイトのフィールドで問題が生じています、私はそれはと私の構造体で定義されています私が読んでいる価値に例えば、12345としようと、ハッシュされたパスワードを生成するために、bcryptのを使用していた結果は次のとおりです。

[36 50 97 36 49 48 36 46 56 98 88 72 82 71 113 66 100 65 105 103 70 119 114 97 73 77 99 78 117 106 54 78 103 88 68 49 56 110 103 112 105 86 
104 79 117 47 114 57 116 51 47 53 97 100 109 103 106 46 68 109] 

すべてがOKがあるまで、私は価値データベースと印刷物からレジスタを読んだとき、私は得る:

[36 50 97 36 48 52 36 56 49 67 66 121 118 90 47 47 104 49 83 120 50 108 112 71 73 51 67 88 46 97 52 74 54 66 84 73 106 105 110 122 98 69 90 51 
78 113 67 66 49 103 50 56 116 47 57 120 78 103 109 54] 

なぜですか? 私はテーブルを作成するためにGORMを使用し、その列の型が保存するには

bytea型コード

としての私のPostgresデータベースに定義されています。

bs, err := bcrypt.GenerateFromPassword([]byte(Pass), bcrypt.DefaultCost)  

if err != nil { 
     fmt.Println("Hey error!") 
} 
user.MyField = bs 
db.Create(&user) 

To Read: db.First(&ユーザー、ID) fmt.Println(user.MyField)

答えて

1

私はあなたの問題はdb.First(&ユーザー、ID)で間違ったIDであると仮定します。おそらくあなたは間違った生のものになるでしょう。私はエラーを再改造しようとしたし、できなかった。次のコードは正常に動作します。

bs, err := bcrypt.GenerateFromPassword([]byte("12345"), bcrypt.DefaultCost) 
expected := bs 

db.Create(&Member{MyField: bs}) 
var member Member 

db.First(&member) 
actual := member.MyField 

if !bytes.Equal(actual, expected) { 
    panic("fields are not equal") 
} 
+0

'bcrypt.CompareHashAndPassword'メソッドは、' bytes.Equal'ではなくパスワード比較のために使用します。 – jeevatkm

+0

私はちょうどハッシュを比較しました、それはパスワードの検証ではなく、著者の問題です。 – bayrinat

関連する問題