

Nodejs(Express)にてTwitterのビューアプリのバックエンドを作成しております。  
ログイン方法はTwitter
Apiを使用して認証後に返ってくるトークンをセッションに保存し、再度アクセスのあった際にcookieからセッションを復元するようにしようと考えております。  
しかし、再度アクセスの際にcookieがブロックされてしまいセッション情報を復元するとこができません。  
使用してるブラウザはchromeなのですが、[chromeのバージョン80からはSameSite属性を指定しなかった場合はSameSite属性がLax(同じドメインのサイトから呼び出された場合にCookieを送信する)](https://gigazine.net/news/20200205-google-
chrome-80/)となるようで、今回の場合はフロントとバックエンドは異なるドメインなのでcookieがブロックされるようです。  
そこでSameSite属性をNone(どのサイトから呼び出されてもCookieを送信する)で設定しようとしているのですが、なかなか上手く設定することができず質問しました。  
おそらくapp.use(session({})の部分で工夫をすればSameSite属性をNoneにすることができるのではないかと思っているのですが、、、  
解決策をご存知の方がおられましたら、お力をお貸しいただけないでしょうか。  
よろしくお願いいたします。

### 該当のソースコード

[code]

    callback_url = env.URL + "oauth/callback";
    
    app.use(
        cookieSession({
          name: "session",
          keys: ["thisappisawesome"],
          maxAge: 24 * 60 * 60 * 100
        })
    );
    
    app.use(cookieParser());
    
    // セッションに保存
    passport.serializeUser(function(user, done) {
        done(null, user.id);
    });
    
    // セッションから復元 routerのreq.userから利用可能
    passport.deserializeUser(function(user, done) {
        done(null, user);
    });
    
    passport.use(
        new TwitterStrategy({
            consumerKey: env.TWITTER_CONSUMER_KEY,
            consumerSecret: env.TWITTER_CONSUMER_SECRET,
            callbackURL: callback_url
        },
        async (token, tokenSecret, profile, done) => {
    
            return done(null, profile);
        }
    ));
    
    app.use(session({
        allowedHeaders: ['sessionId', 'Content-Type'],
        exposedHeaders: ['sessionId'],
        secret: 'reply-analyzer',
        resave: false,
        saveUninitialized: false
    }));
    
    var cors_set = {
        origin: env.CORS_ORIGIN_URL,
        methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
        credentials: true // allow session cookie from browser to pass through
    };
    
    app.use(passport.initialize());
    app.use(passport.session());
    app.use(cors(cors_set));
    
    
[/code]

### 試したこと

1.app.use(session({})の部分でcookieのオプションを設定してみましたが、変わらすSameSite属性をNoneとすることができませんでした。

[code]

    app.use(session({
        allowedHeaders: ['sessionId', 'Content-Type'],
        exposedHeaders: ['sessionId'],
        secret: 'reply-analyzer',
        resave: false,
        saveUninitialized: false,
        cookie : {
            secure: true,
            sameSite: 'None'
          }
    }));
    
[/code]

2.以下のミドルウェアー([express-samesite-default](https://github.com/krakenjs/express-
samesite-default))を使用してみましたが、変わらすSameSite属性をNoneとすることができませんでした。

[code]

    var sameSiteCookieMiddleware = require("express-samesite-default");
    
    app.use(sameSiteCookieMiddleware.sameSiteCookieMiddleware());
    
    
[/code]

### 補足情報（FW/ツールのバージョンなど）

Node.js v12.18.2  
chrome v84.0.4147.135


CC BY-SA 4.0
2020-08-31T06:09:04.547
70010
2023-07-23T06:08:35.970
41712
question
node.js google-chrome twitter cookie session
Nodejs(Express)でcookieのSameSite属性をNoneに設定することができない


自己解決できましたので解決できた方法を記載いたします。  
コード中にcookieSessionとsessionがありますが、どちらかで良いようなので、今回はcookieSessionを使うこととしました。  
最終的に以下のようになりました。

[code]

    var cookieSession = require("cookie-session");
    app.set('trust proxy', 1)
    app.use(
        cookieSession({
          name: "__session",
          keys: ["key1"],
            maxAge: 24 * 60 * 60 * 100,
            secure: true,
            httpOnly: true,
            sameSite: 'none'
        })
    );
    
[/code]


CC BY-SA 4.0
2020-10-22T03:17:45.447
71407
2020-10-22T03:17:45.447
41712
70010
answer