エクスプレスセッションはミドルウェアでは定義されていませんが、コントローラーで定義されています

エリック・アンソニー

セッションがミドルウェアでは定義されていないが、コントローラーでは定義されているエクスプレスセッションで問題が発生しました。

これは、コントローラーにセッションを配置するときの私のコードです

exports.login = (req, res, next) => {
    User.find({username: req.body.username}, (err, data) => {
        if (data.length === 1) {
            const password = data[0]['password']
            bcrypt.compare(req.body.password, password, (err, check) => {
                if (err) console.error(err)
                if (check) {
                    req.session.username = data[0]['username']
                    req.session.userid = data[0]['id']
                    console.log("session when logged in => " + req.session.username) //the session is defined
                    res.redirect('/dashboard')
                } else {
                    res.status(304).send('password salah')
                }
            });
        } else {
            res.status(304).send('username / password tidak tersedia')
        }
    })
}

しかし、私がセッションをミドルウェアでチェックすると

const usermiddleware = (req, res, next) => {
    console.log(req.session.username + " => session in middleware") //undefined
    if (req.session.username) {
        next()
    } else {
        res.redirect('/') //runs here
    }
}

これは私のapp.jsです

let createError = require('http-errors');
let express = require('express');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');
let bodyparser = require('body-parser');
let mongoose = require('mongoose');
let session = require('express-session')
var socket_io = require('socket.io');
let app = express();
let io = socket_io();
app.io = io;


io.on("connection", socket => {
    console.log("A user connected");
});
app.use((req, res, next) => {
    req.io = io;
    next()
})

app.use(session({
    secret: 'asd123',
    saveUninitialized: true,
    resave: true,
    cookie: {
        secure: true
    } 
}))
app.use((req, res, next) => {
    app.locals.username = req.session.username || ""
    app.locals.userid = req.session.userid || ""
    next()
})

app.use((req, res, next) => {
    mongoose.connect('mongodb://localhost/inventory', {
        useNewUrlParser: true,
        keepAlive: true,
        keepAliveInitialDelay: 300000
    });
    const db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', () => {
        req.db = mongoose.connection;
        next()
    });
})

let indexRouter = require('./routes/index');
let usersRouter = require('./routes/users');


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(bodyparser.json());
app.use(bodyparser.urlencoded({extended: true}));
app.use(express.json());
app.use(express.urlencoded({extended: false}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use((req, res, next) => {
    next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

module.exports = app;

これは私のフルインデックスルーターです

let express = require('express');
let router = express.Router();
const usermiddleware = (req, res, next) => {
    console.log(req.session.username + " => session middleware")
    if (req.session.username) {
        next()
    } else {
        res.redirect('/')
    }
}

const auth = require('../controller/auth');
const page = require('../controller/page');

router.get('/', page.index);
router.post('/register', auth.register);
router.post('/login', auth.login);
router.get('/logout', auth.logout)

router.get('/dashboard', usermiddleware, page.dashboard);
router.get('/admin', usermiddleware, usermiddleware, page.admin);

module.exports = router;

注:ソケットioとmonggoseを備えたエクスプレスジェネレーターでエクスプレスセッションを使用しています

エリック・アンソニー

httpsプロトコル用のローカルホストで実行しているので、設定cookie: {secure : false }するだけですapp.use(session({}))cookie:true

お役に立てれば!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

キャッチされないエラー:Firebaseオプションでストレージバケットが定義されていません。(ウェブ)

分類Dev

1.3にアップグレードした後、Typescriptアプリケーションでコントローラーが定義されていません

分類Dev

参照エラー: "UrlShortener" は Google スプレッドシートで定義されていません

分類Dev

Symfony2セッション変数がコントローラーで定義されていません

分類Dev

axios.getリクエストからのパラメータは、エクスプレスバックエンドでは定義されていません

分類Dev

エラーCS7068タイプ「ConfigServices」への参照は、このアセンブリで定義されていると主張していますが、ソースまたは追加されたモジュールでは定義されていません

分類Dev

ラムダアレックススキルセッション属性が定義されていません

分類Dev

vuejs動的コンポーネントがv-bind:isのエラーをスローします。エラーはプロパティまたはメソッドです...インスタンスで定義されていませんが、レンダリング中に参照されます

分類Dev

エラーオブジェクトをスローするジャスミンコードが定義されていません

分類Dev

QtバージョンチェックとQOverloadがスコープで定義されていません

分類Dev

Reactjs、this.contextはコンストラクターメソッドで定義されていません

分類Dev

「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

分類Dev

vue.jsでエラーに直面している "プロパティまたはメソッド" step1_category "はインスタンスで定義されていませんが、レンダリング中に参照されています

分類Dev

コントローラアクションにリダイレクトします。アクションは定義されていません

分類Dev

サービスアカウントを使用してGoogleスプレッドシートにアクセスするときにコールバックが定義されていません

分類Dev

mapGettersを使用してアクセスしていますが、状態はコンポーネントで定義されていません

分類Dev

NestJS 5 GraphQLエラークエリはリゾルバーで定義されていますが、スキーマでは定義されていません

分類Dev

(Vue3)[Vue警告]:プロパティ "..."はレンダリング中にアクセスされましたが、インスタンスで定義されていません。クラスバインディング時の<App>エラー時

分類Dev

Helloworldは「値またはコンストラクターが定義されていません」でコンパイルされません

分類Dev

emberjsプロジェクトにプラグインが含まれていて、ブラウザーで定義されていることを示していますが、アプリで呼び出すと定義されていません

分類Dev

「本」は定義されていますが、MEANスタックコントローラーは使用されていません

分類Dev

MVCでの読み取りアクションのスキャフォールディング「このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。」

分類Dev

Excelスプレッドシートのデータから電子メールを生成しようとすると、コンパイルエラー「ユーザー定義型が定義されていません」が表示されます

分類Dev

Vue CLIエラー:プロパティまたはメソッド「データ」がインスタンスで定義されていません

分類Dev

エラー:vue.js:634 [Vue警告]:プロパティまたはメソッド「item」はインスタンスで定義されていませんが、レンダリング中に参照されています

分類Dev

Reactのステートレスコンポーネントと「小道具は定義されていますが、使用されていません」ESLintエラー

分類Dev

ReferenceError:リクエストがNodeJSセッションで定義されていません

分類Dev

すでにルートを定義していますが、エラーは定義されていません

分類Dev

MobX'this 'はセッターアクションでは定義されていません

Related 関連記事

  1. 1

    キャッチされないエラー:Firebaseオプションでストレージバケットが定義されていません。(ウェブ)

  2. 2

    1.3にアップグレードした後、Typescriptアプリケーションでコントローラーが定義されていません

  3. 3

    参照エラー: "UrlShortener" は Google スプレッドシートで定義されていません

  4. 4

    Symfony2セッション変数がコントローラーで定義されていません

  5. 5

    axios.getリクエストからのパラメータは、エクスプレスバックエンドでは定義されていません

  6. 6

    エラーCS7068タイプ「ConfigServices」への参照は、このアセンブリで定義されていると主張していますが、ソースまたは追加されたモジュールでは定義されていません

  7. 7

    ラムダアレックススキルセッション属性が定義されていません

  8. 8

    vuejs動的コンポーネントがv-bind:isのエラーをスローします。エラーはプロパティまたはメソッドです...インスタンスで定義されていませんが、レンダリング中に参照されます

  9. 9

    エラーオブジェクトをスローするジャスミンコードが定義されていません

  10. 10

    QtバージョンチェックとQOverloadがスコープで定義されていません

  11. 11

    Reactjs、this.contextはコンストラクターメソッドで定義されていません

  12. 12

    「エラー:アクションはプレーンオブジェクトである必要があります。非同期アクションにはカスタムミドルウェアを使用してください。」というメッセージが表示されるのはなぜですか。エラー?

  13. 13

    vue.jsでエラーに直面している "プロパティまたはメソッド" step1_category "はインスタンスで定義されていませんが、レンダリング中に参照されています

  14. 14

    コントローラアクションにリダイレクトします。アクションは定義されていません

  15. 15

    サービスアカウントを使用してGoogleスプレッドシートにアクセスするときにコールバックが定義されていません

  16. 16

    mapGettersを使用してアクセスしていますが、状態はコンポーネントで定義されていません

  17. 17

    NestJS 5 GraphQLエラークエリはリゾルバーで定義されていますが、スキーマでは定義されていません

  18. 18

    (Vue3)[Vue警告]:プロパティ "..."はレンダリング中にアクセスされましたが、インスタンスで定義されていません。クラスバインディング時の<App>エラー時

  19. 19

    Helloworldは「値またはコンストラクターが定義されていません」でコンパイルされません

  20. 20

    emberjsプロジェクトにプラグインが含まれていて、ブラウザーで定義されていることを示していますが、アプリで呼び出すと定義されていません

  21. 21

    「本」は定義されていますが、MEANスタックコントローラーは使用されていません

  22. 22

    MVCでの読み取りアクションのスキャフォールディング「このオブジェクトにはパラメーターなしのコンストラクターが定義されていません。」

  23. 23

    Excelスプレッドシートのデータから電子メールを生成しようとすると、コンパイルエラー「ユーザー定義型が定義されていません」が表示されます

  24. 24

    Vue CLIエラー:プロパティまたはメソッド「データ」がインスタンスで定義されていません

  25. 25

    エラー:vue.js:634 [Vue警告]:プロパティまたはメソッド「item」はインスタンスで定義されていませんが、レンダリング中に参照されています

  26. 26

    Reactのステートレスコンポーネントと「小道具は定義されていますが、使用されていません」ESLintエラー

  27. 27

    ReferenceError:リクエストがNodeJSセッションで定義されていません

  28. 28

    すでにルートを定義していますが、エラーは定義されていません

  29. 29

    MobX'this 'はセッターアクションでは定義されていません

ホットタグ

アーカイブ