2016-11-19 1 views
0

私は試していますthis basic login。サインアップはうまく動作しますが、http://localhost:1337/loginにログインすると(ログインフォームに値を入力して送信すると、URLは変更されません)、次のエラーが表示されます(URLは変更されません):なぜres.loginは機能ではないのですか?

タイプエラー:res.loginは関数ではありません

私はネットで検索してみましたが、どんな解決策を見つけることができませんでした任意の構文エラーがあるか、私は古い技術を使用してい

ここで必要なコードです:?

module.exports = { 
    login: function (req, res) { 
    return res.login({ 
     email: req.param('email'), 
     password: req.param('password'), 
     successRedirect: '/', 
     invalidRedirect: '/login' 
    }); 
    }, 
    logout: function (req, res) { 
    req.session.me = null; 
    if (req.wantsJSON) { 
     return res.ok('Logged out successfully!'); 
    } 
    return res.redirect('/'); 
    }, 

    signup: function (req, res) { 
    User.signup({ 
     name: req.param('name'), 
     email: req.param('email'), 
     password: req.param('password') 
    }, function(err, user){ 
     if (err) return res.negotiate(err); 
     req.session.me = user.id; 
     return res.redirect('/welcome'); 
    }); 
    } 
}; 

は、モデル:user.jsの

module.exports = { 

    attributes: { 
    email: { 
     type: 'email', 
     required: true 
    }, 
    password: { 
     type: 'string', 
     required: true 
    } 
    }, 

    signup : function(inputs, cb){ 
    User.create({ 
     name: inputs.name, 
     email: inputs.email, 
     password: inputs.password 
    }).exec(cb); 
    }, 

    attemptLogin: function(inputs, cb) { 
    User.findOne({ 
     email: inputs.email, 
     password: inputs.password 
    }).exec(cb); 
    } 

}; 

login.ejs

<h1>Login</h1> 
<form action="/login" method="post"> 

    <label for="email">Your email address?</label> 
    <input name="email" type="text"/> 
    <br/> 

    <label for="password">Your safe word?</label> 
    <input name="password" type="password"/> 
    <br/> 
    <input type="submit"/> 
</form> 

routes.js

'/': { 
    view: 'homepage' 
    }, 
    'get /login' : {view : 'user/login'}, 
    'get /signup' : {view : 'user/signup'}, 
    'get /welcome' : {view: 'user/welcome'}, 
    'post /login' : 'UserController.login', 
    'post /signup' : 'UserController.signup', 
    '/logout' : 'UserController.logout' 
+0

コードは何ですか? –

+0

サイトに記載されているものと同じです。 –

+0

どのラインとファイルにエラーがスローされますか? –

答えて

0

私はres.loginはあなたが関数であるとは思いませんログインアクションで使用します。私はあなたのUserController.jsファイルにいくつかの変更を加えました。

UserController.js

は、ログインアクションを介した認証および非認証されたビューを提供しています。セッション変数がすでに認証されているかどうかを追跡するには、セッション変数を使用します。ここでuser.nameを使用していますが、idのような他の属性を使用できます。

login: function (req, res) { 
    if (req.method === 'GET' && !req.session.name) { 
     res.view('user/login'); 
    } 
    else if (req.session.name) { 
     res.view('user/welcome', { username: req.session.name }); 
    } else { 
     User.findOne({ email: req.param('email'), password: req.param('password')}) 
      .exec(function (err, user) { 
       if (err) res.send(err); 
       if (!user) res.send("User Not Found"); 
       else { 
        req.session.name = user.name; 
        res.view('user/welcome', { username: user.name }); 
       } 
      }); 
    } 
}, 

user.jsの 私はUserモデルに属性名を追加しました。これはフォームにありましたが、モデルファイルにはありませんでした。

attributes: { 
    name: { 
     type: 'string', 
     required: true 
    }, 
}, 

routes.js

両方のPOSTにサービスを提供し、同じコントローラ/アクションからの要求をGET

// 'get /login': { view: 'user/login' }, 
'/login': 'UserController.login', 

これらの行を試してみると、正常に動作するはずです。これが役に立つのかどうか教えてください。

+0

ログインするたびにメールとパスワードを取得します。実際には動作しません。フィールドを照合せずにリダイレクトするだけです。 –

+0

ランダム電子メール/パスワードで試してみると、私には「ユーザーが見つかりませんでした」というエラーが表示されます。どのようにあなたのために働いているか分からない。 – Ranjan

関連する問題