Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // data/models/Passport.ts
- import * as mongoose from 'mongoose'
- import * as passport from 'passport'
- import * as passportLocalMongoose from 'passport-local-mongoose'
- import Model from './mongoose'
- (mongoose as any).Promise = global.Promise
- const ObjectIdType = mongoose.Schema.Types.ObjectId
- const Passport: any = new Model({
- plugin: passportLocalMongoose,
- pluginOptions: {
- usernameUnique: true,
- },
- schema: {
- userId: { type: ObjectIdType, ref: 'User' }
- },
- title : 'Passport',
- })
- Passport.register = function (obj: any, pass: any) {
- return new Promise(resolve =>
- this.Collection.register(obj, pass,
- (err: any, res: any) => resolve(res)))
- }
- Passport.login = async function (ctx: any, user: string, pass: string) {
- let res = {};
- console.log('loginUser user> ', ctx.req.user) // should not be undefined after first
- if (typeof ctx.req.user === 'undefined') {
- ctx.req.body.username = user
- ctx.req.body.password = pass
- const auth = new Promise(function(resolve, reject) {
- passport.authenticate('local', function(err, user, info) {
- if (err) {
- reject(err);
- }
- if (info && info.name && info.name.indexOf('Error') !== -1) {
- reject(new Error(info.message));
- }
- if (!user) {
- reject(new Error('No user returned'));
- }
- ctx.req.logIn(user, function(err: any) {
- if (err) {
- reject(err);
- }
- resolve(user);
- });
- })(ctx.req);
- });
- await auth
- .then(user => {
- res = user;
- })
- .catch(err => {
- res = err;
- });
- } else {
- res = new Error('Already logged in');
- }
- return res;
- }
Add Comment
Please, Sign In to add comment