Deny a player joining a room
You can deny a player connection by throwing an error during onAuth()
or onJoin()
methods.
The implementation of when to deny a player connection will depend on your use-case.
Below you can see an example validating the @colyseus/social authentication token, and retrieving a Hero
record linked with the user id.
export class BattleRoom extends Room {
onCreate(options) {
this.levelRequired = 10;
}
async onAuth(client, options) {
const userId = verifyToken(options.token)._id;
const hero = await Hero.findOne({ userId });
if (!hero) {
throw new Error("'Hero' not found in the database!");
} else if (hero.level < this.levelRequired) {
throw new Error("player do not have the level required to be on this room.");
}
return hero;
}
}
The client will then receive an error when trying to join the room:
client.joinOrCreate("battle", {}).then(room => {
// ...
}).catch(e => {
console.log(e) // "'Hero' not found in the database!"
})