2017-01-08 6 views
0

私はユーザーモデルから情報を取得したいときに多くの問題がありました。私はいくつかの解決策を読んだが、私は理解しなかった。sailsJsでのセッションの理解Passportで

これは私のコードです: * AuthController

var passport = require('passport'); 

module.exports = { 

     _config: { 
     actions: false, 
     shortcuts: false, 
     rest: false 
    }, 

    login: function(req, res) { 
     passport.authenticate('local', function(err, user, info) { 
      if ((err) || (!user)) { 
       return res.send({ 
        message: info.message, 
        user: user 
       }); 
      } 
      req.logIn(user, function(err) { 
       if (err) res.send(err); 
       return res.send({ 
        message: info.message, 
        user: user 
       }); 
      }); 

     })(req, res); 
    }, 

    logout: function(req, res) { 
     req.logout(); 
     res.redirect('/'); 
    }, 

    signup: function (req, res) { 
     var data = req.allParams(); 
     User.create({email:data.email,password:data.password,name:data.name}).exec(function(error,user){ 
      if(error) return res.negotiate(err); 
      if(!user)return res.negotiate(err); 
      return res.ok(); 
     }); 
    } 
}; 

*view 
<h1>List of my dates</h1> 
<h1><%= email %></h1> 
<h1><%= req.user.name %></h1> 

*model 
attributes: { 
    email: { 
     type: 'email', 
     required: true, 
     unique: true 
    }, 

    password: { 
     type: 'string', 
     minLength: 6, 
     required: true 
    }, 
    toJSON: function() { 
     var obj = this.toObject(); 
     delete obj.password; 
     return obj; 
    } 
}, 
    beforeCreate: function(user, cb) { 
     bcrypt.genSalt(10, function(err, salt) { 
      bcrypt.hash(user.password, salt, function(err, hash) { 
       if (err) { 
        console.log(err); 
        cb(err); 
       } else { 
        user.password = hash; 
        cb(); 
       } 
      }); 
     }); 
    } 
}; 

だけ私はres.render( 'ビュー'、{Eメール:req.user.email})を使用する場合は動作しますが、私が使用したいです多くのビューのユーザーデータ。私は仕事をしないので、現在のユーザーパラメータでメソッドを書くことはできません。

ありがとうございました。

+0

FYIでは、モデルインスタンスメソッド(toJson)がv1で削除されていますので、これは機能しません。ここの最後をご覧ください:http:///0.12.sailsjs.com/documentation/concepts/models-and-orm/models –

答えて

0

あなたの実際の問題が何であるか、実際に問題が何であるかは不明ですが、私は助けようとします。

ここを見て:あなたはEJSと値に(地元の人)のデータを追加しているがあり

login: function(req, res) { 
    passport.authenticate('local', function(err, user, info) { 
    if ((err) || (!user)) { 
     return res.send({ 
     message: info.message, 
     user: user 
     }); 
    } 
    ... 
    })(req, res); 
}, 

はそうEJSにあなたはこのようにそれを参照する必要がありmessageuserあるので、あなたはuser.nameを使用しません。 req.user.name(req, res)のいずれかをバインドする理由がわかりません。

ejsが電子メールの値を使用しているので混乱しますが、私はそれがあなたの問題であるかもしれないので、それは定義されなければならないでしょうか?あなたは強度試験(ユーザーセットに対処したい場合はhttp://node-machine.org/machinepack-passwords

そして、この:あなたは、パスワードの暗号化に対処したい場合は

// User Controller 

// GET request /signin 
// The signin form 
signin(req, res) { 
    // Load the view from app/views/* 
    return res.view('signin', { 
    title: 'Sign In' 
    }); 
}, 

// POST request to /signin 
// This was posted from the signin form 
// Use io.socket.post(...) to do this from the signin form 
// Can use window.location.replace('/account') on successful request 
authenticate(req, res) { 
    // The data posted, email and password attempt 
    var data = req.allParams(); 
    // Does it match? 
    User.findOne({ 
    email: data.email, 
    // This is stupid, don't ever use plain text passwords 
    password: data.password 
    }) 
    .exec(function(err, user) { 
    // Server related error? 
    if (err) res.serverError(err.message); 
    // No user was found 
    if (!user) res.badRequest('Username or password not found'); 
    // Sign the user in 
    req.session.userId = user.id; 
    // User was found 
    res.ok(); 
    }); 
}, 

// GET request to /account 
// Displays the users information 
// Can use policies to ensure that only an authenticated user may access their own account information 
account(req, res) { 
    // If the user is not signed in 
    // This is an alternative to using the sails policy isLoggedIn 
    if (!req.session.userId) res.redirect('/signin'); 
    // Get the users details 
    User.findOne({ 
    id: req.session.userId 
    }) 
    .exec(function(err, user) { 
    // Server related error? 
    if (err) res.serverError(err.message); 
    // No user was found 
    if (!user) res.redirect('/signin'); 
    // Load the ejs file that displays the users information 
    return res.view('account/index', { 
     title: 'Account Information', 
     user: user 
    }); 
    }); 
}, 

// Account View 

<p>Email: {{user.email}}</p> 
<p>Password: {{user.password}}</p> 

チェックこのアウト:

は、次の簡単な例を考えてみましょうパスワード):https://www.npmjs.com/package/owasp-password-strength-test

これは、ローカル認証のみを行っている場合、パスポートが過剰なように見えますか?

+0

ありがとうございました。はい、これは私の問題です。私は、ビューからユーザー情報を取得できません。私はreq.user.nameとuser.nameで試してみましたが、何も起こりません。答えは「未定義」です。 この記事が表示されます。助けてくれてありがとう。 –

+0

@FranciscoPossettoローカルコード(ejs)でローカル(データ)がどのように動作しているかを理解し、質問を編集し、ビューコードをロードしているコントローラのアクション/メソッドを追加するための例を見てみましょう。私はそれを見ることができない、私は盲目ですか? –

関連する問題