2017-03-12 14 views
0

私はNodeJSで小さなWebサイトを開発し始めました。管理者認証はhttps://github.com/DanialK/Simple-Authenticationに基づいており、とてもうまく動作します。NodeJSは自分のテンプレートのDB値を取ることができません

ユーザーを作成してログインし、プライベートページ(ダッシュボード)を表示できます。管理者は、自分のダッシュボードに来るとき しかし、私はちょうど示すことwan't、(私はNunjucksを使用しています)私のテンプレートに問題がある:「admin_username」:

はとして記録されます。

これは私のコードです:

モデル:

const UserSchema = new mongoose.Schema({ 
    username: String, 
    email: String, 
    password: String, 
    salt: String, 
    hash: String 
}) 

モデルの定義:

const User = mongoose.model('user', UserSchema) 

マイルート:

10は、だから、私はテンプレートで使用する必要があり、 "ユーザー" を送信します。

{% extends "base/layout.njk" %} 

{% block content %} 
admin:dashboard page <br /><br /><br /> 

{% if sessionFlash.message %} 
    <div class="{{ sessionFlash.type }}"> 
    {{ sessionFlash.message }} 
    </div> 
{% endif %} 

You are logged as : {{ user.username }} 

{% endblock %} 

user.usernameで、私は、ユーザー名を取得することはできません。 のユーザーのみ私はDB、ユーザー名、電子メール、塩、ハッシュから文書全体を取得します。ルートから

これはにconsole.log(ユーザー)の結果である:これが重要な場合

[ { _id: 58c58ad8a5e54c00117ce85b, 
username: 'test', 
email: 'test', 
salt: '/71BBVmr8E3b/HUz8L89IWLV7xM/vG9nvJRGzQYPw4dwR8GICr0kJtGs8dqwNzsMU7yki9aa2WM7C2NRxf/ausw+4kyiLojfugYzdrh+6obBq5HcZPZfQq+djwsTyyd+CDPJ/EmbUQyIL1yM7lRLfkhfrCIZ9P1mJZZM9fv4thw=', 
hash: '��F\u0000\u000b ��a�\u001c|A˓P�N&��\u0010�5ajd�7{c �@�mQ����&��W�rW\'�+������\u0013����������N�4�y>/1��R\u001ca>���=U�u<9�T�o" \u000b�����Ʌ^�\u0004\u001f��\u0007�B`A�d���[email protected]$���', 
__v: 0 } ] 

が分からないのですが、認証のために使用される2つの機能があります:requiredAuthenticationそして認証:あなたはwan'tなら、私を助けるため

function authenticate(name, pass, fn) { 
if (!module.parent) console.log('authenticating %s:%s', name, pass); 

User.findOne({ 
    username: name 
}, 

function (err, user) { 
    if (user) { 
     if (err) return fn(new Error('cannot find user')); 
     hash(pass, user.salt, function (err, hash) { 
      if (err) return fn(err); 
      if (hash == user.hash) return fn(null, user); 
      fn(new Error('invalid password')); 
     }); 
    } else { 
     return fn(new Error('cannot find user')); 
    } 
}); 
} 

function requiredAuthentication(req, res, next) { 
    console.log("#### ->REQUIREDAUTHENTICATION() ####") 
    if (req.session.user) { 
    console.log("#### AUTH NEXT() ####") 
    next(); 
    } else { 
    console.log("#### AUTH DIE() ####") 
    req.session.sessionFlash = { 
     type: 'alert alert-success', 
     message: 'You can't access the dashboard' 
    } 
    res.redirect('/admin/account/login'); 
    } 
} 

おかげで、追加の情報は、私に尋ねます。

答えて

0

このように見えるのはuserオブジェクトは実際には1つのアイテムを持つ配列です。あなたはその先導[によって、console.log出力に伝えることができます。問題を解決するには、user[0]をレンダリング関数に渡すか、後で複数のユーザーを取得する場合に備えてテンプレートにforループを追加します。

+0

私のテンプレートでは{{user [0] .username}}を使ってくれてありがとうございましたが、別のプロジェクト{{something.title}}でうまくいきましたので不思議です! – Dlazzy

+0

うれしかった!受信データが単一のオブジェクトまたは配列になるとは必ずしも思えません。使用しているAPIに依存します。私が正しいと覚えていれば、mongooseのModel.find()メソッドは常に配列を返しますが、それについては私を引用しません) –

関連する問題