Registracijski sistem.

This commit is contained in:
Matjaz
2022-02-09 22:51:27 +01:00
parent 0b40010581
commit a429c9262b
9 changed files with 144 additions and 2 deletions

2
app.js
View File

@ -9,6 +9,7 @@ var indexRouter = require('./routes/index');
var usersRouter = require('./routes/user'); var usersRouter = require('./routes/user');
var messagesRouter = require('./routes/message'); var messagesRouter = require('./routes/message');
var loginRouter = require('./routes/login'); var loginRouter = require('./routes/login');
var registerRouter = require('./routes/register');
var app = express(); var app = express();
@ -31,6 +32,7 @@ app.use('/', indexRouter);
app.use('/user', usersRouter); app.use('/user', usersRouter);
app.use('/message', messagesRouter); app.use('/message', messagesRouter);
app.use('/login', loginRouter); app.use('/login', loginRouter);
app.use('/register', registerRouter);
// catch 404 and forward to error handler // catch 404 and forward to error handler
app.use(function(req, res, next) { app.use(function(req, res, next) {

Binary file not shown.

View 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');
}
};

View File

@ -26,6 +26,8 @@ fs
db.User.belongsToMany(db.Message, {foreignKey: 'UserId', through: 'UserMessages'}); db.User.belongsToMany(db.Message, {foreignKey: 'UserId', through: 'UserMessages'});
db.Message.belongsTo(db.User, {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 => { Object.keys(db).forEach(modelName => {
if (db[modelName].associate) { if (db[modelName].associate) {

24
models/session.js Normal file
View 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;
};

View File

@ -1,7 +1,9 @@
var express = require('express'); var express = require('express');
const { UniqueConstraintError } = require('sequelize/dist/index.js');
var router = express.Router(); var router = express.Router();
const db = require('../models'); const db = require('../models');
var User = db.User; var User = db.User;
const crypto = require('crypto');
/* GET home page. */ /* GET home page. */
router.get('/', function(req, res, next) { router.get('/', function(req, res, next) {
@ -17,7 +19,20 @@ router.post('/', async function(req, res, next) {
} }
}); });
console.log(user); console.log(user);
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'); res.render('login');
}
}); });
module.exports = router; module.exports = router;

27
routes/register.js Normal file
View 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;

View File

@ -27,7 +27,7 @@
</div> </div>
<div class="flex items-baseline justify-between"> <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> <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>
</div> </div>
</form> </form>

42
views/register.ejs Normal file
View 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>