В вопросе и ответе getNotificationPermission - обертка для "Notification" in window и Notification.requestPermission
Набросал решение, оно банально, и описано частично в вопросе, но все же вот, наверняка кому-то пригодится:
Добавляем в профиль признак подписки true/false
Перед фактическим logout делаем deleteToken(), localStorage.removeItem fcm-токена и удаляем соответствующую запись из таблички с девайсами - оборачиваем это в промис, чтобы успеть завершить все действия до фактического выхода.
При логине если стейт признака подписки true - проверяем getNotificationPermission() и если все ок, то делаем getToken(), в ином случае даем toast уведомление.