PassportJS - using multiple local strategies simultaneously

I need to implement two LOCAL strategies using Passportjs, which might have to be available simultaneously.

Here is the scenario: Let's say I have an user and a room, where each has name and password for authentication. Clearly I can define two separate local strategies with different names (e.g. 'user-local' and 'room-local') and on successful name and password validation to return corresponding object -user or room. I can also differentiate object types inside serializeUser / deserializeUser methods. The issue I have got is that req.login method populates one and one only variable - req.user after each successful authentication. Therefore, if I authenticate successfully as an user, req.user holds my User object. If later I authenticate as a room, the same req.user now has been populated with Room object, overriding previous User object. This causes troubles for me, since I need to access specific object methods & fields via req.user for both objects (when both authentications are done successfully). Same goes for req.isAuthenticated method - it will return true / false based on the last authentication result, overriding the previous one.

How can I do what I need?

If the user is able to log-in straight away with the room credentials without having to do it with the user's one first then you have 2 authentication logic that can be aggregated to each other later on. I'd store it in a session before logging in again, or implement a new authentication system that would store user / room info in different req variables.

Passportjs helps you handling single user authentication logic with many different strategies types, let's say one user per session (using session is the recommended way).