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 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.
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.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
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');
|
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
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>
|
||||||
<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
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