Registracijski sistem.
This commit is contained in:
2
app.js
2
app.js
@ -9,6 +9,7 @@ var indexRouter = require('./routes/index');
|
||||
var usersRouter = require('./routes/user');
|
||||
var messagesRouter = require('./routes/message');
|
||||
var loginRouter = require('./routes/login');
|
||||
var registerRouter = require('./routes/register');
|
||||
|
||||
var app = express();
|
||||
|
||||
@ -31,6 +32,7 @@ app.use('/', indexRouter);
|
||||
app.use('/user', usersRouter);
|
||||
app.use('/message', messagesRouter);
|
||||
app.use('/login', loginRouter);
|
||||
app.use('/register', registerRouter);
|
||||
|
||||
// catch 404 and forward to error handler
|
||||
app.use(function(req, res, next) {
|
||||
|
Binary file not shown.
30
migrations/20220209204150-create-session.js
Normal file
30
migrations/20220209204150-create-session.js
Normal file
@ -0,0 +1,30 @@
|
||||
'use strict';
|
||||
module.exports = {
|
||||
async up(queryInterface, Sequelize) {
|
||||
await queryInterface.createTable('Sessions', {
|
||||
id: {
|
||||
allowNull: false,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
type: Sequelize.INTEGER
|
||||
},
|
||||
sessionid: {
|
||||
type: Sequelize.TEXT
|
||||
},
|
||||
agentid: {
|
||||
type: Sequelize.TEXT
|
||||
},
|
||||
createdAt: {
|
||||
allowNull: false,
|
||||
type: Sequelize.DATE
|
||||
},
|
||||
updatedAt: {
|
||||
allowNull: false,
|
||||
type: Sequelize.DATE
|
||||
}
|
||||
});
|
||||
},
|
||||
async down(queryInterface, Sequelize) {
|
||||
await queryInterface.dropTable('Sessions');
|
||||
}
|
||||
};
|
@ -26,6 +26,8 @@ fs
|
||||
|
||||
db.User.belongsToMany(db.Message, {foreignKey: 'UserId', through: 'UserMessages'});
|
||||
db.Message.belongsTo(db.User, {through: 'UserMessages'});
|
||||
db.User.belongsToMany(db.Session, {foreignKey: 'UserId', through: 'UserSessions'});
|
||||
db.Session.belongsTo(db.User, {through: 'UserSessions'});
|
||||
|
||||
Object.keys(db).forEach(modelName => {
|
||||
if (db[modelName].associate) {
|
||||
|
24
models/session.js
Normal file
24
models/session.js
Normal file
@ -0,0 +1,24 @@
|
||||
'use strict';
|
||||
const {
|
||||
Model
|
||||
} = require('sequelize');
|
||||
module.exports = (sequelize, DataTypes) => {
|
||||
class Session extends Model {
|
||||
/**
|
||||
* Helper method for defining associations.
|
||||
* This method is not a part of Sequelize lifecycle.
|
||||
* The `models/index` file will call this method automatically.
|
||||
*/
|
||||
static associate(models) {
|
||||
// define association here
|
||||
}
|
||||
}
|
||||
Session.init({
|
||||
sessionid: DataTypes.TEXT,
|
||||
agentid: DataTypes.TEXT
|
||||
}, {
|
||||
sequelize,
|
||||
modelName: 'Session',
|
||||
});
|
||||
return Session;
|
||||
};
|
@ -1,7 +1,9 @@
|
||||
var express = require('express');
|
||||
const { UniqueConstraintError } = require('sequelize/dist/index.js');
|
||||
var router = express.Router();
|
||||
const db = require('../models');
|
||||
var User = db.User;
|
||||
const crypto = require('crypto');
|
||||
|
||||
/* GET home page. */
|
||||
router.get('/', function(req, res, next) {
|
||||
@ -17,7 +19,20 @@ router.post('/', async function(req, res, next) {
|
||||
}
|
||||
});
|
||||
console.log(user);
|
||||
res.render('login');
|
||||
if(user) {
|
||||
var uuid = crypto.randomUUID();
|
||||
var agentid = req.rawHeaders[3];
|
||||
var session = await user.createSession({
|
||||
sessionid: uuid,
|
||||
agentid: agentid
|
||||
});
|
||||
console.log(session);
|
||||
var maxage = 60 * 60 * 24;
|
||||
res.cookie('sessionid', session.sessionid, {maxAge: maxage, httpOnly: true});
|
||||
res.redirect('/');
|
||||
} else {
|
||||
res.render('login');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
27
routes/register.js
Normal file
27
routes/register.js
Normal file
@ -0,0 +1,27 @@
|
||||
var express = require('express');
|
||||
var router = express.Router();
|
||||
const db = require('../models');
|
||||
var User = db.User;
|
||||
var Session = db.Session;
|
||||
|
||||
/* GET home page. */
|
||||
router.get('/', function(req, res, next) {
|
||||
res.render('register');
|
||||
});
|
||||
|
||||
router.post('/', async function(req, res, next) {
|
||||
console.log(req.body);
|
||||
if((req.body.username === '') || (req.body.email === '') || (req.body.password === '')) {
|
||||
res.redirect('/register');
|
||||
} else {
|
||||
var user = await User.create({
|
||||
name: req.body.username,
|
||||
email: req.body.email,
|
||||
password: req.body.password,
|
||||
});
|
||||
console.log(user);
|
||||
res.redirect('/login');
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
@ -27,7 +27,7 @@
|
||||
</div>
|
||||
<div class="flex items-baseline justify-between">
|
||||
<button type="submit" class="px-6 py-2 mt-4 text-white bg-blue-600 rounded-lg hover:bg-blue-900">Login</button>
|
||||
<a href="#" class="text-sm text-blue-600 hover:underline">Forgot password?</a>
|
||||
<a href="/register" class="text-sm text-blue-600 hover:underline">Register</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
42
views/register.ejs
Normal file
42
views/register.ejs
Normal file
@ -0,0 +1,42 @@
|
||||
<!DOCTYPE html>
|
||||
<html class="dark">
|
||||
|
||||
<head>
|
||||
<title>Social Robot</title>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<link rel="stylesheet" href="/stylesheets/style.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fork-awesome@1.2.0/css/fork-awesome.min.css"
|
||||
integrity="sha256-XoaMnoYC5TH6/+ihMEnospgm0J1PM/nioxbOUdnM8HY=" crossorigin="anonymous">
|
||||
</head>
|
||||
|
||||
<div class="flex items-center justify-center min-h-screen bg-gray-100">
|
||||
<div class="px-8 py-6 mt-4 text-left bg-white shadow-lg">
|
||||
<h3 class="text-2xl font-bold text-center">Register new account</h3>
|
||||
<form action="/register" method="POST">
|
||||
<div class="mt-4">
|
||||
<div>
|
||||
<label class="block" for="username">Name<label>
|
||||
<input name="username" type="text" placeholder="Name"
|
||||
class="w-full px-4 py-2 mt-2 border rounded-md focus:outline-none focus:ring-1 focus:ring-blue-600">
|
||||
</div>
|
||||
<div class="mt-4">
|
||||
<label class="block" for="email">Email<label>
|
||||
<input name="email" type="text" placeholder="Email"
|
||||
class="w-full px-4 py-2 mt-2 border rounded-md focus:outline-none focus:ring-1 focus:ring-blue-600">
|
||||
</div>
|
||||
<div class="mt-4">
|
||||
<label class="block">Password<label>
|
||||
<input name="password" type="password" placeholder="Password"
|
||||
class="w-full px-4 py-2 mt-2 border rounded-md focus:outline-none focus:ring-1 focus:ring-blue-600">
|
||||
</div>
|
||||
<div class="flex items-baseline justify-between">
|
||||
<button type="submit" class="px-6 py-2 mt-4 text-white bg-blue-600 rounded-lg hover:bg-blue-900">Register</button>
|
||||
<a href="/login" class="text-sm text-blue-600 hover:underline">Already have account?</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</html>
|
Reference in New Issue
Block a user