Javascript ExpressJs+;Passport.js+;MySQL身份验证
每当我试图通过localhost注册任何用户时,它并没有创建数据库,我已经厌倦了在mysql中运行schema.sql文件,它工作正常,但之后我也无法注册。我已经给出了我的全部代码,所以有人能帮我解决这个问题吗Javascript ExpressJs+;Passport.js+;MySQL身份验证,javascript,mysql,node.js,passport.js,Javascript,Mysql,Node.js,Passport.js,每当我试图通过localhost注册任何用户时,它并没有创建数据库,我已经厌倦了在mysql中运行schema.sql文件,它工作正常,但之后我也无法注册。我已经给出了我的全部代码,所以有人能帮我解决这个问题吗 package.json { "name": "passport_mysql_express_auth", "description": "ExpressJs + Passport.js + MySQL Authentication", "v
package.json
{
"name": "passport_mysql_express_auth",
"description": "ExpressJs + Passport.js + MySQL Authentication",
"version": "1.0.0",
"author": "",
"main": "app.js",
"dependencies": {
"bcrypt-nodejs": "*",
"body-parser": "*",
"bookshelf": "0.5",
"cookie-parser": "*",
"ejs": "*",
"express": "4.x",
"express-session": "*",
"knex": "^0.10.0",
"mariasql": "^0.2.6",
"mysql": "*",
"passport": "*",
"passport-local": "*"
}
}
index.ejs
欢迎
signin.ejs
签到表
用户名
密码
signup.ejs
登记表
用户名
密码
Bookself
与knex
配合良好,因此首先使用以下命令安装knex
npm install --save knex
安装后,按如下所示更改db.js
文件
var knex = require('knex')({
client: 'mysql',
connection: {
host: 'localhost',
user: 'deen',
password: 'deen',
database: 'lttp',
charset : 'utf8'
}
});
var Bookshelf = require('bookshelf')(knex);
module.exports.DB = Bookshelf;
在您的包内.json
将Bookself
版本更改为*
。您的package.json
应该具有以下依赖项列表
{
"name": "passport_mysql_express_auth",
"description": "ExpressJs + Passport.js + MySQL Authentication",
"version": "1.0.0",
"author": "",
"main": "app.js",
"dependencies": {
"bcrypt-nodejs": "*",
"body-parser": "*",
"bookshelf": "*",
"cookie-parser": "*",
"ejs": "*",
"express": "4.x",
"express-session": "*",
"knex": "*",
"mariasql": "^0.2.6",
"mysql": "*",
"passport": "*",
"passport-local": "*"
}
}
你的意思是数据没有进入数据库?那么如何解决这个问题呢?你运行代码了吗?你得到了什么错误,你能添加你的包吗?json?事实上,在输入用户ID和密码后,我没有收到任何错误。页面正在加载,只是没有在db中添加值,也不会进入另一个页面…这里的代码太多了-您是否希望有人花一天时间调试您的问题?如果你花一些时间自己减少它来确定具体的问题,你会得到更好的答案;这样做也可能让你在不需要帮助的情况下找到答案。阅读关于如何做到这一点的建议。真棒。很高兴知道。谢谢你发布这个!
route.js
// vendor library
var passport = require('passport');
var bcrypt = require('bcrypt-nodejs');
// custom library
// model
var Model = require('./model');
// index
var index = function(req, res, next) {
if(!req.isAuthenticated()) {
res.redirect('/signin');
} else {
var user = req.user;
if(user !== undefined) {
user = user.toJSON();
}
res.render('index', {title: 'Home', user: user});
}
};
// sign in
// GET
var signIn = function(req, res, next) {
if(req.isAuthenticated()) res.redirect('/');
res.render('signin', {title: 'Sign In'});
};
// sign in
// POST
var signInPost = function(req, res, next) {
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/signin'}, function(err, user, info) {
if(err) {
return res.render('signin', {title: 'Sign In', errorMessage: err.message});
}
if(!user) {
return res.render('signin', {title: 'Sign In', errorMessage: info.message});
}
return req.logIn(user, function(err) {
if(err) {
return res.render('signin', {title: 'Sign In', errorMessage: err.message});
} else {
return res.redirect('/');
}
});
})(req, res, next);
};
// sign up
// GET
var signUp = function(req, res, next) {
if(req.isAuthenticated()) {
res.redirect('/');
} else {
res.render('signup', {title: 'Sign Up'});
}
};
// sign up
// POST
var signUpPost = function(req, res, next) {
var user = req.body;
var usernamePromise = null;
usernamePromise = new Model.User({username: user.username}).fetch();
return usernamePromise.then(function(model) {
if(model) {
res.render('signup', {title: 'signup', errorMessage: 'username already exists'});
} else {
var password = user.password;
var hash = bcrypt.hashSync(password);
var signUpUser = new Model.User({username: user.username, password: hash});
signUpUser.save().then(function(model) {
// sign in the newly registered user
signInPost(req, res, next);
});
}
});
};
// sign out
var signOut = function(req, res, next) {
if(!req.isAuthenticated()) {
notFound404(req, res, next);
} else {
req.logout();
res.redirect('/signin');
}
};
// 404 not found
var notFound404 = function(req, res, next) {
res.status(404);
res.render('404', {title: '404 Not Found'});
};
// export functions
// index
module.exports.index = index;
// sigin in
// GET
module.exports.signIn = signIn;
// POST
module.exports.signInPost = signInPost;
// sign up
// GET
module.exports.signUp = signUp;
// POST
module.exports.signUpPost = signUpPost;
// sign out
module.exports.signOut = signOut;
// 404 not found
module.exports.notFound404 = notFound404;
schema.sql
drop database if exists dbUsers;
create database if not exists dbUsers;
use dbUsers;
drop table if exists tblUsers;
create table if not exists tblUsers(
userId integer primary key auto_increment,
username varchar(100) unique,
password varchar(100)
)engine=innodb;
index.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<title><%= title %></title>
</head>
<body>
<p>
Welcome <strong><%= user.username %></strong>
<a href="/signout" title="sign out">sign out</a>
</p>
</body>
</html>
signin.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<title><%= title %></title>
</head>
<body>
<h2>Sign In Form</h2>
<form method="post" action="/signin">
<% if(typeof(errorMessage) !== 'undefined') {%>
<span><%= errorMessage %></span>
<% } %>
<p>
<label for="username">username</label>
<input type="text" name="username" id="username"
placeholder="username" required="true"/>
</p>
<p>
<label for="password">password</label>
<input type="text" name="password" id="password"
placeholder="password" required="true"/>
</p>
<p>
<input type="submit" name="signin" id="signin" value="sign in"/>
<a href="/signup" title="register">register</a>
</p>
</form>
</body>
</html>
signup.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<title><%= title %></title>
</head>
<body>
<h2>Register Form</h2>
<form method="post" action="/signup">
<% if(typeof(errorMessage) !== 'undefined') {%>
<span><%= errorMessage %></span>
<% } %>
<p>
<label for="username">username</label>
<input type="text" name="username" id="username"
placeholder="username" required="true"/>
</p>
<p>
<label for="password">password</label>
<input type="text" name="password" id="password"
placeholder="password" required="true"/>
</p>
<p>
<input type="submit" name="signup" id="signup" value="register"/>
<a href="/signin" title="sign in">sign in</a>
</p>
</form>
</body>
</html>
npm install --save knex
var knex = require('knex')({
client: 'mysql',
connection: {
host: 'localhost',
user: 'deen',
password: 'deen',
database: 'lttp',
charset : 'utf8'
}
});
var Bookshelf = require('bookshelf')(knex);
module.exports.DB = Bookshelf;
{
"name": "passport_mysql_express_auth",
"description": "ExpressJs + Passport.js + MySQL Authentication",
"version": "1.0.0",
"author": "",
"main": "app.js",
"dependencies": {
"bcrypt-nodejs": "*",
"body-parser": "*",
"bookshelf": "*",
"cookie-parser": "*",
"ejs": "*",
"express": "4.x",
"express-session": "*",
"knex": "*",
"mariasql": "^0.2.6",
"mysql": "*",
"passport": "*",
"passport-local": "*"
}
}