node.js - 正确使用 nano.auth

标签 node.js authentication cookies couchdb couchdb-nano

所以根据这里的 nano 文档:https://github.com/dscape/nano#using-cookie-authentication ,您可以通过以下方式对用户进行身份验证:(在 coffeescript 中)

nano = require('nano') 'http://localhost:5984'
nano.auth username, password

我对此没问题,我可以获得正确的响应,但我遇到的问题是之后该怎么做。我最初的想法是执行以下操作(当通过 futon 使用管理员用户名和密码设置时):

nano = require('nano') 'http://localhost:5984'
nano.auth username, password
nano.db.create 'test', (err, body) -> #err here is always [Error: you are not a server admin.]

如果我调试从 nano.auth 返回的错误、正文和 header ,我会得到:

err: null
body: { ok: true, name: null, roles: [ '_admin' ] }
header: { 'set-cookie': [ 'AuthSession=bm9kZV9hZG1pbjo1MzRFMTEwQzoGNe9XUrMu5IKYPK3BP3GQyHeRWQ; Version=1; Path=/; HttpOnly' ],
    date: 'Wed, 16 Apr 2014 05:11:40 GMT',
    'content-type': 'text/plain; charset=utf-8',
    'cache-control': 'must-revalidate',
    'status-code': 200,
    uri: 'http://127.0.0.1:5984/_session' }

在我的测试中,我还尝试了以下似乎也不起作用的方法

nano = require('nano') "#{prefix}://#{security.couchdb.url}"
cookie = ''
nano.auth security.couchdb.admin_user.username, security.couchdb.admin_user.password, (err, response, headers) ->
    console.log "Nano_admin Setup"
    console.log err
    console.log response
    console.log headers
    cookie = headers['set-cookie']
nano = require('nano')
    url: "#{prefix}://#{security.couchdb.url}"
    cookie: "AuthSession=#{cookie}"
nano.db.create 'test', (err, body) -> #err here is always [Error: you are not a server admin.]

谁能指出我哪里出错/误解了什么?

最佳答案

我想通了 - 但我现在觉得自己很傻。永远记住 node.js 是异步的。

正确的做法:

nano = require('nano') 'http://localhost:5984'
nano.auth username, password, (err, response, headers) ->
    nano = require('nano')
        url: 'http://localhost:5984'
        cookie: headers['set-cookie']
    nano.db.create 'test', (err, body) -> 

关于node.js - 正确使用 nano.auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23100132/

相关文章:

c# - 从架构的角度来看,Session[] 或 Encrypted Cookies 的最佳方法是什么?

javascript - csrf token 困惑。我可以用 wget 获取它,没有跨源问题。那有什么意义呢?

php - Websockets 控制用户访问

javascript - 控制台在Nodejs中没有方法 'debug'?

javascript - ReactJS onclick 向另一个元素添加或删除类

Node.js mysql 模块中的 MySQL 用户定义变量

authentication - stackoverflow 上的联合登录如何工作?是否有一个可用的、同样精致的库?

php - 在 Laravel 中扩展开箱即用的用户模型

javascript - 如何在 Web 浏览器中捕获 "JavaScript SetCookie event"?

javascript - 使用函数、数组和循环理解 JS 编程代码