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

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

ただいまの
回答率

88.77%

Nuxt.jsでCSPの設定が効かない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 997

AyumuShigeta

score 31

Nuxt.js でLINEログインを実装しているのですが
ログイン用のサーバーにアクセスすると、次のようなエラーが出ます

localhost:5000/auth/lineにアクセス時

Nuxt.jsでCSPの設定方法をNuxtドキュメントなどを調べました。
後述するようにnuxt.config.jsを設定してサーバーを再起動して見たのですが一向に上の、「default-src 'none'」エラーが表示され続けます。

改善すべき所など分かる方がいましたらご教授ください。。

// nuxt.config.js
import VuetifyLoaderPlugin from 'vuetify-loader/lib/plugin'
import pkg from './package'
require('dotenv').config();
const { BASE_URL } = process.env;
const isDev = process.env.NODE_ENV !== 'production'
export default {
  mode: 'spa',

  env: {
    BASE_URL
  },

  /*
  ** Headers of the page
  */
  head: {
    title: pkg.name,
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: pkg.description }
    ],
    link: [
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' },
      {
        rel: 'stylesheet',
        href:
          'https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Material+Icons'
      }
    ]
  }

  /*
  ** Nuxt.js modules
  */
  modules: [
    '@nuxtjs/proxy',
    '@nuxtjs/axios',
    ['nuxt-validate', {
      lang: 'ja',
    }]
  ],
  proxy: {
    '/api' : "http://localhost:8000"
  },

  generate: {
    routes() {
    }
  },

  serverMiddleware: ['~/server'],
  /*
  ** Build configuration
  */
  build: {
    transpile: ['vuetify/lib'],
    plugins: [new VuetifyLoaderPlugin()],
    loaders: {
      stylus: {
        import: ['~assets/style/variables.styl']
      }
    },
    /*
    ** You can extend webpack config here
    */
    extend(config, ctx) {
    }
  },
  render: {
    csp: {
      enabled: true,
      policies: {
        'script-src': [
          'https://www.google-analytics.com'
        ],
        'default-src': [
          'self',
          'http://localhost:5000'
           ]
      }
    }
  }
}
// server/index.js

"use strict";
import URL from '../assets/constants/url'

require("dotenv").config();

// ライブラリのインポート。
const express = require("express");
const app = express();
const line_login = require("line-login");
const session = require("express-session");
const session_options = {
    secret: process.env.LINE_LOGIN_CHANNEL_SECRET,
    resave: false,
    saveUninitialized: true
}
app.use(session(session_options));

// 認証の設定。
const lineLogin = new line_login({
    channel_id: process.env.LINE_LOGIN_CHANNEL_ID,
    channel_secret: process.env.LINE_LOGIN_CHANNEL_SECRET,
    callback_url: process.env.LINE_LOGIN_CALLBACK_URL,
    prompt: "consent"
});

// サーバー起動設定。
app.listen(process.env.PORT || 5000, () => {
    console.log(`server is listening to ${process.env.PORT || 5000}...`);
});

// 認証フローを開始するためのルーター設定。
app.get(
  URL.AUTH_LINE_LOGIN,
  lineLogin.auth()
);

// ユーザーが承認したあとに実行する処理のためのルーター設定。
app.use(
  URL.CALLBACK_URL_LINE_LOGIN,
  lineLogin.callback(
    (req, res, next, token_response) => {
          // Success callback
          res.json(token_response);
    },(req, res, next, error) => {
          // 認証フロー失敗時
          res.status(400).json(error);
      }
  ));
module.exports = {
  path: '/server',
  handler: app,
// 下記は念の為に追記して見たのですが効果はありませんでした
  render: {
    csp: {
      enabled: true,
      policies: {
        'script-src': [
          'https://www.google-analytics.com',
          'http://localhost:5000',
        ],
        'default-src': [
          'self',
          'http://localhost:5000'
           ],
        'img-src': ['self','http://localhost:5000']
      }
    }
  }
};
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る