mirror of
https://github.com/naturalcrit/naturalcrit.git
synced 2025-10-27 07:29:54 +00:00
Creating and setting jwt is working
This commit is contained in:
parent
5a45da4d79
commit
2618341bb7
@ -53,6 +53,41 @@ const LoginPage = React.createClass({
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
console.log('making cookie');
|
||||
|
||||
document.cookie = "session="+res.body+"; path=/";
|
||||
|
||||
|
||||
this.setState({
|
||||
processing : false,
|
||||
errors : null,
|
||||
success : true
|
||||
}, ()=> {
|
||||
if(this.props.redirect) window.location = this.props.redirect;
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
signup : function(){
|
||||
this.setState({
|
||||
processing : true,
|
||||
errors: null
|
||||
});
|
||||
request.post('/signup')
|
||||
.send({
|
||||
user : this.state.username,
|
||||
pass : this.state.password,
|
||||
})
|
||||
.end((err, res) => {
|
||||
this.setState({processing : false });
|
||||
if(err){
|
||||
console.log('EROR', err);
|
||||
return;
|
||||
}
|
||||
|
||||
console.log(res);
|
||||
|
||||
this.setState({
|
||||
processing : false,
|
||||
errors : null,
|
||||
@ -73,6 +108,9 @@ const LoginPage = React.createClass({
|
||||
return <div> success</div>
|
||||
},
|
||||
|
||||
//Add detection for being logged in
|
||||
//Add a lil logout button
|
||||
|
||||
render : function(){
|
||||
return <div className='loginPage'>
|
||||
<div className='content'>
|
||||
@ -86,6 +124,7 @@ const LoginPage = React.createClass({
|
||||
<input type='text' onChange={this.handlePassChange} value={this.state.password} />
|
||||
|
||||
<button onClick={this.handleLoginClick}>login</button>
|
||||
<button onClick={this.signup}>signup</button>
|
||||
|
||||
{this.renderProcessing()}
|
||||
{this.renderSuccess()}
|
||||
|
||||
@ -13,6 +13,7 @@ let Router;
|
||||
const Naturalcrit = React.createClass({
|
||||
getDefaultProps: function() {
|
||||
return {
|
||||
user : {},
|
||||
url : ''
|
||||
};
|
||||
},
|
||||
@ -33,6 +34,7 @@ const Naturalcrit = React.createClass({
|
||||
});
|
||||
},
|
||||
render : function(){
|
||||
console.log(this.props);
|
||||
return <div className='naturalcrit'>
|
||||
<Router initialUrl={this.props.url}/>
|
||||
</div>
|
||||
|
||||
@ -13,8 +13,10 @@
|
||||
"bcrypt-nodejs": "0.0.3",
|
||||
"body-parser": "^1.15.2",
|
||||
"classnames": "^2.2.0",
|
||||
"cookie-parser": "^1.4.3",
|
||||
"express": "^4.13.3",
|
||||
"gulp": "^3.9.0",
|
||||
"jwt-simple": "^0.5.0",
|
||||
"lodash": "^4.11.2",
|
||||
"mongoose": "^4.6.5",
|
||||
"pico-router": "^1.1.1",
|
||||
|
||||
66
server.js
66
server.js
@ -1,17 +1,19 @@
|
||||
'use strict';
|
||||
|
||||
var _ = require('lodash');
|
||||
const _ = require('lodash');
|
||||
require('app-module-path').addPath('./shared');
|
||||
var vitreumRender = require('vitreum/render');
|
||||
var bodyParser = require('body-parser')
|
||||
var express = require("express");
|
||||
var app = express();
|
||||
const vitreumRender = require('vitreum/render');
|
||||
const cookieParser = require('cookie-parser');
|
||||
const bodyParser = require('body-parser');
|
||||
const express = require("express");
|
||||
const app = express();
|
||||
app.use(express.static(__dirname + '/build'));
|
||||
app.use(bodyParser.json());
|
||||
app.use(cookieParser());
|
||||
|
||||
//Mongoose
|
||||
var mongoose = require('mongoose');
|
||||
var mongoUri = process.env.MONGODB_URI || process.env.MONGOLAB_URI || 'mongodb://localhost/naturalcrit';
|
||||
const mongoose = require('mongoose');
|
||||
const mongoUri = process.env.MONGODB_URI || process.env.MONGOLAB_URI || 'mongodb://localhost/naturalcrit';
|
||||
mongoose.connect(mongoUri);
|
||||
mongoose.connection.on('error', function(){
|
||||
console.log(">>>ERROR: Run Mongodb.exe ya goof!");
|
||||
@ -20,36 +22,80 @@ mongoose.connection.on('error', function(){
|
||||
const AccountModel = require('./server/account.model.js').model;
|
||||
|
||||
|
||||
|
||||
//Homebrew Reidrect
|
||||
app.all('/homebrew*', (req, res) => {
|
||||
return res.redirect(302, 'http://homebrewery.naturalcrit.com' + req.url.replace('/homebrew', ''));
|
||||
});
|
||||
|
||||
|
||||
|
||||
//Bumpo these out to a api file
|
||||
app.post('/login', (req, res) => {
|
||||
const user = req.body.user;
|
||||
const pass = req.body.pass;
|
||||
|
||||
AccountModel.login(user, pass)
|
||||
.then((jwt) => {
|
||||
return res.json(jwt);
|
||||
})
|
||||
.catch((err) => {
|
||||
return res.json(err);
|
||||
});
|
||||
|
||||
//return res.status(200).send();
|
||||
});
|
||||
|
||||
app.post('/signup', (req, res) => {
|
||||
const user = req.body.user;
|
||||
const pass = req.body.pass;
|
||||
|
||||
console.log(user, pass);
|
||||
|
||||
//move to account model
|
||||
var newAccount = new AccountModel({
|
||||
username : user,
|
||||
password : pass
|
||||
});
|
||||
newAccount.save(function(err, obj){
|
||||
if(err){
|
||||
console.error(err, err.toString(), err.stack);
|
||||
return res.status(500).send(`Error while creating new account, ${err.toString()}`);
|
||||
}
|
||||
return res.json(obj);
|
||||
});
|
||||
|
||||
return res.status(200).send();
|
||||
});
|
||||
|
||||
|
||||
const jwt = require('jwt-simple');
|
||||
app.get('/test', (req, res) => {
|
||||
console.log('cookies', req.cookies);
|
||||
if(req.cookies.session){
|
||||
const cool = jwt.decode(req.cookies.session, 'secret');
|
||||
|
||||
return res.json(cool)
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
const accountMW = (req, res, next) => {
|
||||
if(req.cookies && req.cookies.session){
|
||||
req.user = jwt.decode(req.cookies.session, 'secret');
|
||||
}
|
||||
return next();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//Render Page
|
||||
app.get('*', (req, res) => {
|
||||
app.get('*', accountMW, (req, res) => {
|
||||
vitreumRender({
|
||||
page: './build/naturalcrit/bundle.dot',
|
||||
globals:{},
|
||||
prerenderWith : './client/naturalcrit/naturalcrit.jsx',
|
||||
initialProps: {
|
||||
user : req.user,
|
||||
url: req.originalUrl,
|
||||
},
|
||||
clearRequireCache : !process.env.PRODUCTION,
|
||||
|
||||
10
server/account.jwt.js
Normal file
10
server/account.jwt.js
Normal file
@ -0,0 +1,10 @@
|
||||
const jwt = require('jwt-simple');
|
||||
|
||||
|
||||
module.exports = (key) => {
|
||||
return {
|
||||
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
@ -1,8 +1,11 @@
|
||||
const mongoose = require('mongoose');
|
||||
const _ = require('lodash');
|
||||
|
||||
const jwt = require('jwt-simple');
|
||||
const bcrypt = require('bcrypt-nodejs');
|
||||
|
||||
const SALT_WORK_FACTOR = 10;
|
||||
const SECRET = 'secret';
|
||||
|
||||
const AccountSchema = mongoose.Schema({
|
||||
username: { type: String, required: true, index: { unique: true } },
|
||||
@ -13,23 +16,44 @@ const AccountSchema = mongoose.Schema({
|
||||
|
||||
AccountSchema.pre('save', function(next) {
|
||||
const account = this;
|
||||
|
||||
// only hash the password if it has been modified (or is new)
|
||||
if (!account.isModified('password')) return next();
|
||||
|
||||
// generate a salt
|
||||
bcrypt.genSalt(SALT_WORK_FACTOR, function(err, salt) {
|
||||
if (err) return next(err);
|
||||
// hash the password along with our new salt
|
||||
bcrypt.hash(account.password, salt, function(err, hash) {
|
||||
if (err) return next(err);
|
||||
account.password = hash;
|
||||
next();
|
||||
});
|
||||
});
|
||||
const salt = bcrypt.genSaltSync(SALT_WORK_FACTOR);
|
||||
const hash = bcrypt.hashSync(account.password, salt);
|
||||
|
||||
if(!hash) return next({ok : false, msg : 'err making password hash'});
|
||||
account.password = hash;
|
||||
return next();
|
||||
});
|
||||
|
||||
AccountSchema.methods.checkPassword = (candidatePassword) => {
|
||||
AccountSchema.statics.login = function(username, pass){
|
||||
return new Promise((resolve, reject) => {
|
||||
Account.find({username : username}, (err, users) => {
|
||||
if(err) return reject(err);
|
||||
if(!users || users.length == 0) return reject({ ok : false, msg : 'no User'});
|
||||
|
||||
const user = users[0];
|
||||
user.checkPassword(pass)
|
||||
.then((isMatch) => {
|
||||
if(!isMatch) return reject({ok : false, msg : 'Bad pass'});
|
||||
return resolve(user.getJWT());
|
||||
})
|
||||
.catch(reject)
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
AccountSchema.statics.signup = function(username, pass){
|
||||
return new Promise((resolve, reject) => {
|
||||
//try to find existing user, fail if found
|
||||
//create new entry
|
||||
//getJWT for new entry
|
||||
//return it
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
AccountSchema.methods.checkPassword = function(candidatePassword) {
|
||||
return new Promise((resolve, reject) => {
|
||||
bcrypt.compare(candidatePassword, this.password, function(err, isMatch) {
|
||||
if (err) return reject(err);
|
||||
@ -38,11 +62,14 @@ AccountSchema.methods.checkPassword = (candidatePassword) => {
|
||||
});
|
||||
};
|
||||
|
||||
AccountSchema.methods.getJWT = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
AccountSchema.methods.getJWT = function(){
|
||||
const payload = this.toJSON();
|
||||
payload.issued = (new Date());
|
||||
|
||||
delete payload.password;
|
||||
delete payload._id;
|
||||
|
||||
});
|
||||
return jwt.encode(payload, SECRET);
|
||||
};
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user