corvid
March 21, 2016, 2:39pm
1
So I have a DDP connection for my users. After reconnection, it seems like the user is always logged out. So I tried this.
import {DDP} from 'meteor/ddp';
import {Meteor} from 'meteor/meteor';
import {Accounts} from 'meteor/accounts-base';
// some other garbage omitted
export const Remote = DDP.connect(Meteor.settings.public.remoteUrl);
Accounts.connection = Remote;
Accounts.onLogin(function () {
Meteor._localStorage.setItem('login token', Accounts._storedLoginToken());
});
Remote.onReconnect = function () {
if (Meteor.isClient) {
const token = Meteor._localStorage.getItem('login token');
if (token) {
Meteor.loginWithToken(token);
}
}
}
export default Remote;
Is this the appropriate way to manage it? It seems this.userId
is not set in publications on my current server
I’m doing something similar, and decided to create a Meteor.method
for this.
In this method, I’m validating the token, and use this.setUserId(userId)
to set the userId
on the server
. In the method callback (on the client), I use Meteor.connection.setUserId(userId);
to fix the userId
on the client.
Simplified version:
// server
Meteor.methods({
onReconnect: ({ token, userId }) => {
// validate token
this.setUserId(userId);
}
});
// client
Remote.onReconnect = () => {
const token = Meteor._localStorage.getItem('login token');
if (token) {
Meteor.call('onReconnect', { token, userId }, (error, result) => {
// if all okay
Meteor.connection.setUserId(userId);
});
}
};
Although, I’m using it to restore an old session and not to restore a remote session. But I assume it works the same?
1 Like
corvid
March 22, 2016, 3:02pm
3
that actually solves two of my problems; thank you sir!