Я новичок, так что извините, если это выглядит как беспорядок.
Каждый раз, когда я запускаю мутацию, я проверяю mlab, и он работает ... пользователь обновляется, но после выхода из системы ... я не могу войти в систему. .но я не уверен, как это исправить. Возможно, пароль необходимо отправить вместе с запросом ... Я отправляю идентификатор? Local.password не в реквизитах ...
Вот мой server.js
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const graphqlHTTP = require('express-graphql');
const graphqlSchema = require('./server/GQL/schema.js');
//added for auth start
const morgan = require('morgan');
const session = require('express-session');
const MongoStore = require('connect-mongo')(session);
const dbConnection = require('./server/db');
const passport = require('./server/passport');
const cors = require('cors');
const app = express();
// allow cross-origin requests
app.use(cors());
const port = process.env.PORT || 5000;
// ===== Middleware ====
app.use(morgan('dev'));
app.use(
bodyParser.urlencoded({
extended: false,
})
);
app.use(bodyParser.json());
app.use(
session({
secret: process.env.APP_SECRET || 'this is the default passphrase',
store: new MongoStore({ mongooseConnection: dbConnection }),
resave: false,
saveUninitialized: false,
})
);
// ===== Passport ====
app.use(passport.initialize());
app.use(passport.session()); // will call the deserializeUser
// bind express with graphql
app.use('/graphql', cors(), (req, res, next) =>{
console.log(req.session);
return graphqlHTTP({
schema: graphqlSchema,
graphiql: true,
context: { user: req.user },
tracing: true,
cacheControl: true,
formatError: error => ({
message: error.message,
locations: error.locations,
stack: error.stack ? error.stack.split('\n') : [],
path: error.path,
}),
})(req, res, next);
});
// API calls
app.get('/api/hello', (req, res) => {
res.send({ express: 'Hello From Express' });
});
app.get('/api/goodbye', (req, res) => {
res.send({ express: 'Goodbye From Express' });
});
if (process.env.NODE_ENV === 'production') {
// Serve any static files
app.use(express.static(path.join(__dirname, 'client/build')));
// Handle React routing, return all requests to React app
app.get('*', function(req, res) {
res.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});
}
app.use('/auth', require('./server/auth'));
app.listen(port, () => console.log(`Listening on port ${port}`));
Я использовал graphql-mongoose-compose для своей схемы:
У меня тогда есть мутация, похожая на:
mutation userUpdateById($id: MongoID!, $firstName: String, $lastName: String,
$username: String, $email: String,$bio: String,
$phone: String, $street: String, $city: String,
$state: String,$zipcode: String, $country: String){
userUpdateById(record: {
firstName: $firstName,
lastName: $lastName,
local: {
username: $username,
email: $email,
}
bio: $bio,
phone: $phone,
address:{
street: $street,
city: $city,
state: $state,
zipcode: $zipcode,
country:$country,
}
_id: $id,
})...
`
Тогда у меня есть следующие способы сохранения пользователя:
UserSchema.methods = {
checkPassword: function(inputPassword) {
return bcrypt.compareSync(inputPassword, this.local.password);
},
hashPassword: plainTextPassword => {
return bcrypt.hashSync(plainTextPassword, 10);
},
};
// Define hooks for pre-saving
userSchema.pre('save', function(next) {
if (!this.local.password) {
console.log('=======NO PASSWORD PROVIDED=======');
next();
} else {
this.local.password = this.hashPassword(this.local.password);
next();
}
});