Meteor Roadmap Update, August 27th, 2024

The function is based on this post: Authenticating a user in server-side routes - #5 by jamgold

const getUserIdFromToken = loginToken => {
  const user = Meteor.users.findOne(
    { 'services.resume.loginTokens.hashedToken': Accounts._hashLoginToken(loginToken) },
    { fields: { _id: 1 } }
  );

  if (user) {
    return { response: 'success', message: user._id };
  }
  return { response: 'error', message: 'noUser' };
};

The loginToken is stored in cookies by the serviceWorker:

import { Meteor } from 'meteor/meteor';
import { Accounts } from 'meteor/accounts-base';
import { Cookies } from 'meteor/ostrio:cookies';

Meteor.startup(() => {
  Accounts.onLogin(user => {
    const cookies = new Cookies();
    cookies.set('meteor_login_token', user.token);
  });
  navigator.serviceWorker
    .register('/sw.js', { scope: '/pwa' })
    .catch(error => {
      console.log('ServiceWorker registration failed: ', error);
    });
});

The share target is definedin in the manifest:

    "share_target": {
      "action": "./pwaShareChecklistImage",
      "method": "POST",
      "enctype": "multipart/form-data",
      "params": {
          "files": [{
              "name": "file",
              "accept": ["image/*"]
          }]
      }
    }

To get the userId from the WebApp endpoint:

WebApp.connectHandlers.use('/pwaShareChecklistImage', (req, res, next) => {
  const loginToken = req.cookies?.meteor_login_token;
  const { response, message } = getUserIdFromToken(loginToken);
}
1 Like