简体   繁体   中英

After PassportJS Authentication Sign Up How can you Register that user to mailchimp list?

Good Morning, I am trying to get user information from a signup form that is posting to my Mongo Database to then sign a user up to Mailchimp. The code I current am working with is:

require("dotenv").config();
const express     =   require("express"),
    expressSanitizer=   require("express-sanitizer"),
    router      =   express.Router(),
    passport    =   require("passport"),
    User        =   require("../models/user"),
    middleware  =   require("../middleware"),
    superagent  = require('superagent'),
    mailchimp   = require('@mailchimp/mailchimp_marketing'),
    request     = require('request'),
    https       = require('https');
//REGISTER USER
router.post("/register", function (req, res){
    var newUser = {
        firstName:  req.sanitize(req.body.firstName),
        lastName:   req.sanitize(req.body.lastName),
        email:      req.sanitize(req.body.email),
        username:   req.sanitize(req.body.username)
    };
    User.register(newUser, req.body.password, function(err,user){
        if(err){
            // DISPLAYS PASSPORT ERROR
            console.log(err);
            return res.render("/login");
        }
        passport.authenticate("local")(req, res, function(){
            console.log(user);
            res.redirect("/insider/resources");
        });
    });
    // Mailchimp Logic
    const firstName = req.sanitize(req.body.firstName);
    const lastName = req.sanitize(req.body.lastName);
    const email = req.sanitize(req.body.email);
    
    var data = {
        members:[ {
          email_address: email,
          status: "subscribed",
          merge_fields: {
            FNAME: firstName,
            LNAME: lastName
          }
        }]
      };
    
    var jsondata = JSON.stringify(data);

      const url = `https://us3.api.mailchimp.com/3.0/lists/`+process.env.MAILCHIMPLIST; 
    
      const options = {
        method: "POST",
        body: data,
        auth: process.env.MAILCHIMP
      };

    const request = https.request(url, options, function(response){

    response.on("data", function (data) {
      console.log(JSON.parse(data));
    });

    if(response.statusCode === 200){
      res.render("/insider/resources");
    } else {
      res.render("landing");
    }
  });

  request.write(jsondata);
  request.end();
});

In this example process.env.MAILCHIMP is my stored API, process.env.MAILCHIMPLIST is the audience I want to drop the users into.

A This point I know the user is registered because my console.log() shows the user registered in Mongo. After this I get this error from Mailchimp's API:

{
  type: 'https://mailchimp.com/developer/marketing/docs/errors/',
  title: 'API Key Invalid',
  status: 401,
  detail: "Your API key may be invalid, or you've attempted to access the wrong datacenter.",
  instance: '40471ba2-403c-9846-ef76-f3cb6b39087f'
}

If anyone could help me find where I am making a mistake I would greatly appreciate it.

I realized after looking at my code I did not have two dependencies installed, thank you to anyone who tried to help, but the exact code to make this work is:

// REQUIREMENTS
require("dotenv").config();
const express     =   require("express"),
    expressSanitizer=   require("express-sanitizer"),
    router      =   express.Router(),
    passport    =   require("passport"),
    User        =   require("../models/user"),
    mailchimp   = require('@mailchimp/mailchimp_marketing'),
    request     = require('request'),
    https       = require('https');


    // Mailchimp Logic in your route
    let firstName = req.sanitize(req.body.firstName);
    let lastName = req.sanitize(req.body.lastName);
    let email = req.sanitize(req.body.email);
    
    var data = {
        members:[ {
          email_address: email,
          status: "subscribed",
          merge_fields: {
            FNAME: firstName,
            LNAME: lastName
          }
        }]
      };
    
    var jsonData = JSON.stringify(data);

      const url = 'https://us3.api.mailchimp.com/3.0/lists/'+process.env.MAILCHIMPLIST; 
    
      const options = {
        method: "POST",
        auth: "archit:"+process.env.MAILCHIMPAPI,
      };

    const request =  https.request(url, options, (response) => {
        response.on("data", (data) => {
            console.log(JSON.parse(data));
        });
    });

  request.write(jsonData);
  request.end();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM