2016-10-20 4 views
0

Cloudant가 포함 된 빠른 애플리케이션을 내 DB로 만들었습니다. 여권을 인증 미들웨어로 사용합니다. 그래서 기본적으로 메모리 내 세션 저장소를 제공합니다. 그래서 응용 프로그램을 다시 시작할 때마다 세션이 파괴됩니다.req.user의 cloudant connect 결과가있는 세션 저장소가 여권 로컬 전략에서 발견되지 않습니까?

그래서 connect-cloudant와 같은 세션 저장 메커니즘을 사용해야합니다.

app.js에서 myaccount route가 활성화되었을 때 req.user 또는 req.isAuthenticated()가 표시되지 않습니까? 내가 코드를 cloudant-연결하고 메모리 세션 저장소에 기본으로 시도 제거하면 , 나는 req.uesr을 얻을 수 오전 req.isAuthenticated

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 app.js

내가 여기 뭔가를 놓치고있어 누군가가 도와 줄 수 있습니다.

답변

1

하루를 망친 후에 나는 이것을 해결할 수 있습니다. sessionstore-cloudant를 사용하여 클라우드에 세션을 저장할 수 있습니다.

몇 가지 유 sessionstore를 사용하여 r에 때

  1. 요람이 필요 기억한다.
  2. 은 cloudant에 연결하는 동안 포트 이름을 제공합니다.

    app.use (세션 ({ 비밀 "SECRETWORD" 가기 : sessionstore.createSessionStore ({ 유형 : 'CouchDB를' 호스트 : cloudanturl, 포트 : 443, DBNAME : sessionDataBaseName, 옵션 { 인증 : { 이름 : cloudantUsername, 비밀번호 : cloudantPassword } } })
    }));

0

먼저 Cloudant 사용자 이름과 암호를 코드 조각에 붙여 넣었습니다. 이제 비밀번호를 변경하고 싶을 것입니다. 코드 줄에서

:

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

당신이 yhsqizvkmp 데이터베이스에서 사용자 문서를 읽을하려고합니다. 나는 "org.couchdb.user :"접두어가 필요하지 않다고 생각합니다. 이것은 CouchDB가 "사용자"데이터베이스를 위해 사용하는 접두어입니다. 사용자 데이터베이스를 사용하지 않으므로 접두사는 제거 할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 나는 하루 종일 뒤섞여서 서둘러 코드 스 니펫을 붙여 넣었다. 그 점을 지적 해 주셔서 감사합니다. –

+0

방금 ​​couchdb에서 cloudant로 이동했기 때문에 dbs가 복제됩니다. 왜 내가 그 접두사를 사용했는지. –

+0

귀하의 의견에서 데이터베이스 이름을 변경하라는 겸손한 요청 –