2016-11-19 342 views
0

我在嘗試this basic login。註冊工作正常,但當我登錄http://localhost:1337/login(當我在登錄表單中輸入值並提交時,它顯示以下錯誤(URL不變):爲什麼顯示res.login不是函數?

TypeError: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的 我添加的屬性名用戶模型。這是在表格中,但沒有在模型文件中。

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

routes.js

服務POST和GET從相同的控制器/行動的請求。

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

嘗試圍繞這些行,你應該能夠得到它的工作。讓我知道這是否有幫助。

+0

它將每個電子郵件和任何密碼登錄。所以這實際上並不奏效。這只是重定向而不匹配字段。 –

+0

當我嘗試使用隨機電子郵件/密碼時,它爲我提供'用戶未找到'錯誤。不知道它是如何爲你工作的。 – Ranjan

相關問題