前提・実現したいこと
Nodejs(Express)にてTwitterのビューアプリのバックエンドを作成しております。
ログイン方法はTwitter Apiを使用して認証後に返ってくるトークンをセッションに保存し、再度アクセスのあった際にcookieからセッションを復元するようにしようと考えております。
しかし、再度アクセスの際にcookieがブロックされてしまいセッション情報を復元するとこができません。
使用してるブラウザはchromeなのですが、chromeのバージョン80からはSameSite属性を指定しなかった場合はSameSite属性がLax(同じドメインのサイトから呼び出された場合にCookieを送信する)となるようで、今回の場合はフロントとバックエンドは異なるドメインなのでcookieがブロックされるようです。
そこでSameSite属性をNone(どのサイトから呼び出されてもCookieを送信する)で設定しようとしているのですが、なかなか上手く設定することができず質問しました。
おそらくapp.use(session({})の部分で工夫をすればSameSite属性をNoneにすることができるのではないかと思っているのですが、、、
解決策をご存知の方がおられましたら、お力をお貸しいただけないでしょうか。
よろしくお願いいたします。
該当のソースコード
express
1callback_url = env.URL + "oauth/callback"; 2 3app.use( 4 cookieSession({ 5 name: "session", 6 keys: ["thisappisawesome"], 7 maxAge: 24 * 60 * 60 * 100 8 }) 9); 10 11app.use(cookieParser()); 12 13// セッションに保存 14passport.serializeUser(function(user, done) { 15 done(null, user.id); 16}); 17 18// セッションから復元 routerのreq.userから利用可能 19passport.deserializeUser(function(user, done) { 20 done(null, user); 21}); 22 23passport.use( 24 new TwitterStrategy({ 25 consumerKey: env.TWITTER_CONSUMER_KEY, 26 consumerSecret: env.TWITTER_CONSUMER_SECRET, 27 callbackURL: callback_url 28 }, 29 async (token, tokenSecret, profile, done) => { 30 31 return done(null, profile); 32 } 33)); 34 35app.use(session({ 36 allowedHeaders: ['sessionId', 'Content-Type'], 37 exposedHeaders: ['sessionId'], 38 secret: 'reply-analyzer', 39 resave: false, 40 saveUninitialized: false 41})); 42 43var cors_set = { 44 origin: env.CORS_ORIGIN_URL, 45 methods: "GET,HEAD,PUT,PATCH,POST,DELETE", 46 credentials: true // allow session cookie from browser to pass through 47}; 48 49app.use(passport.initialize()); 50app.use(passport.session()); 51app.use(cors(cors_set)); 52
試したこと
1.app.use(session({})の部分でcookieのオプションを設定してみましたが、変わらすSameSite属性をNoneとすることができませんでした。
express
1app.use(session({ 2 allowedHeaders: ['sessionId', 'Content-Type'], 3 exposedHeaders: ['sessionId'], 4 secret: 'reply-analyzer', 5 resave: false, 6 saveUninitialized: false, 7 cookie : { 8 secure: true, 9 sameSite: 'None' 10 } 11}));
2.以下のミドルウェアー(express-samesite-default)を使用してみましたが、変わらすSameSite属性をNoneとすることができませんでした。
express
1var sameSiteCookieMiddleware = require("express-samesite-default"); 2 3app.use(sameSiteCookieMiddleware.sameSiteCookieMiddleware()); 4
補足情報(FW/ツールのバージョンなど)
Node.js v12.18.2
chrome v84.0.4147.135
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。