質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

解決済

1回答

1055閲覧

OAuth認証で取得したユーザー情報からプロフィール画像をMongoDBに保存する方法

maskmelon

総合スコア63

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2020/09/04 14:01

編集2020/09/04 14:05

Express.jsでアプリを作成しています。OAuth認証で取得したユーザー情報からプロフィール画像をmongoDBに保存したいです。

あるチュートリアルを参考にして以下のように実装してみたのですが、bufferにデータが入っていないようです。認証を実行してもリダイレクトされず、console.logの結果も出力されません。

JavaScript

1//Google OAuth認証設定 2passport.use(new GoogleStrategy({ 3 clientID: process.env.GOOGLE_CLIENT_ID, 4 clientSecret: process.env.GOOGLE_CLIENT_SECRET, 5 callbackURL: 'http://localhost:3000/oauth2/google/callback', 6}, 7(async (accessToken, refreshToken, profile, cb) => { 8 const buffer = await sharp(profile._json.picture.buffer).resize({ width: 250, height: 250 }).png().toBuffer(); 9 console.log(buffer); 10 11 User.findOrCreate({ 12 username: profile.id, 13 provider: profile.provider, 14 displayName: profile.displayName, 15 avatar: buffer 16 }, (err, user) => cb(err, user)); 17})));

JavaScript

1//Userスキーマ 2const userSchema = new mongoose.Schema({ 3 username: { 4 type: String, 5 required: true, 6 }, 7 provider: { 8 type: String, 9 required: true, 10 }, 11 displayName: { 12 type: String, 13 default: 'Unknown', 14 }, 15 avatar: { 16 type: Buffer, 17 }, 18});

profile._json.pictureにはhttps://lh3.googleusercontent.comから始まるURLが入っており、アクセスするとブラウザ上で画像が表示されます。

Buffer形式で保存するのがベストなのかどうかということも含めアドバイスを頂けると幸いです。

理解が不十分な点があるかと思いますが、何卒よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

画像ファイルとして保存するのではなく、画像URLをString形式でそのままMongoDBに保存し、imgタグのsrcに保存したURLを代入して表示させるという方法で一応解決することができました。

投稿2020/09/08 13:49

maskmelon

総合スコア63

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問