2016-10-20 6 views
0

クラウドをエクスプレスアプリケーションとして作成しました。私は、認証ミドルウェアとしてパスポートを使用します。デフォルトでは、メモリ内セッションストアが提供されます。だから私はアプリケーションを再起動するたびに、セッションが破壊されます。req.userのクラウド接続のセッションストアは、パスポートのローカル戦略に見つかりませんか?

私はconnect-cloudantのようないくつかのセッション記憶機構を使用しなければなりません。

in app.js myaccountルートがその時点でアクティブになっているときにreq.userまたはreq.isAuthenticated()が取得されていませんか? 私は接続-cloudantコードを削除し、メモリのセッションストアにデフォルトでしようとした場合、私はreq.uesrを取得することができるよと

app.js

var https   = require("https"); 
var fs   = require("fs"); 
var express  = require("express"); 
var app   = express(); 
var cookieParser = require("cookie-parser"); 
var session  = require("express-session"); 
var CloudantStore = require('connect-cloudant')(session); 
var passport  = require("passport"); 
var strategy  = require("passport-local").Strategy; 
var path   = require("path"); 
var bodyParser = require("body-parser"); 
var cons   = require('consolidate'); 
var config  = require("./config"); 
var Cloudant_ip = config.CLOUDENT_IP; 
var Cloudant  = require('cloudant'); 
var cloudant  = Cloudant(Cloudant_ip); 
var Port   = config.PORT; 
var Local_ip  = config.LOCAL_IP; 

var cloudantStore = new CloudantStore({ 
    url: Cloudant_ip, 
    databaseName: "sessions" 
}); 

app.use(express.static("public/_attachments")); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded()); 
app.use(cookieParser()); 

app.use(session({ 
    store: cloudantStore, 
    secret: 'cloudant', 
    cookie: {maxAge:24*60*60*1000} 
})); 

require("./src/config/passport")(app); 

function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { 
    return next(); 
    } else { 
    res.redirect("/"); 
    } 
} 

app.engine('html', cons.swig); 
app.set('views', path.join(__dirname, 'pages')); 
app.set('view engine', 'html'); 

app.get("/",ensureLoginAuthenticated,function(req,res) { 
    res.render("index.html"); 
}); 

app.get("/myaccount",ensureAuthenticated,function(req,res) { 
    res.render("my-account.html"); 
}); 

https.createServer({ 
    key: fs.readFileSync('key.pem'), 
    cert: fs.readFileSync('cert.pem') 
}, app).listen(Port,Local_ip, function() { 
    console.log("server is running on port "+Port); 
}); 

passport.jsをreq.isAuthenticated

var passport = require("passport"), 
     LocalStrategy = require("passport-local").Strategy, 
     Cloudant = require("cloudant"), 
     cloudant = Cloudant("https://username:[email protected]"), 
     db = cloudant.db.use("myuserdatabase"); 

module.exports = function(app) { 
    app.use(passport.initialize()); 
    app.use(passport.session()); 

    passport.serializeUser(function(user,cb) { 
     cb(null,user); 
    }); 

    passport.deserializeUser(function(user,cb) { 
     cb(null, user); 
    }); 

    passport.use(new LocalStrategy({ 
     usernameField: "username", 
     passwordField: "password" 
    }, 
    function(username, password, cb) { 
     db.get("org.couchdb.user:"+username, function(err,body){ 
      if(!err) { 
       if(password == body.password) { 
        var user = { 
         username: body.email, 
         password:body.password 
        }; 
        cb(null, user); 
       }else { 
        cb(null, false); 
       } 
      }else { 
       cb(null, false); 
      } 
     }); 
    })); 
}; 

私はここに何かが不足しているので、誰でも手伝ってくれると思います。

答えて

1

私はこれを解決できます。 sessionstore-cloudantの使用で、私は雲にセッションを保存することができます。 uはセッションストアを使用してrのとき

  1. クレードルが必要とされて覚えて

    いくつかのこと。

  2. は、クラウドに接続するときにポート名を指定します。

    app.use(セッション({ 秘密: "SECRETWORD"、 店舗:sessionstore.createSessionStore({ タイプ: 'CouchDBの'、 ホスト:cloudanturl、 ポート:443、 DBNAME:sessionDataBaseName、 オプション:{ AUTH:{ 名:cloudantUsername、 パスワード:cloudantPassword }}} )
    }))。

0

まず、Cloudunのユーザー名とパスワードをコードスニペットに貼り付けました。パスワードを今すぐ変更したいと思うかもしれません。このコード行で

db.get("org.couchdb.user:"+username, function(err,body) ...

あなたはyhsqizvkmpデータベースからユーザー文書を読み取ろうとしています。私は、 "org.couchdb.user:"プレフィックスは必要ないと思う。これはCouchDBが "users"データベースとして使うプレフィックスです。ユーザーデータベースを使用していないので、プレフィックスは削除できます。

+0

ご返信ありがとうございます。私は一日中それをつぶしていたし、急いでコードスニペットを貼り付けました。それを指摘してくれてありがとう。 –

+0

私はちょうどcouchdbからcloudantに移動し、したがってdbsが複製されます。なぜ私はそのプレフィックスを使用したのですか? –

+0

あなたのコメントからデータベース名を変更するような謙虚な要求 –

関連する問題