Как я должен обрабатывать аутентификацию с Vue.js и пользователями, каждый из которых владеет коллекцией в MongoDB? - PullRequest
0 голосов
/ 14 июня 2019

Когда пользователь будет использовать мое приложение, ему нужно будет войти в систему, а затем получить доступ к приложению, чья информация извлекается из коллекции MongoDB со всеми их записями.Каждый пользователь будет иметь коллекцию, вероятно, со своим идентификатором пользователя в качестве имени коллекции.

Если кто-то знаком с Habitica, это довольно близко к тому, что я пытаюсь сделать.

Я использую Vue.js, Express, MongoDB ... Axios используется для созданияCRUD запросы, я считаю.Единственное, что я попробовал, - это поиск различных способов выполнения аутентификации, но мне хотелось бы получить некоторые рекомендации о том, с чего начать - например, когда я начал изучать разработку с использованием полного стека, я несколько раз переключал стеки, прежде чем найти тот, который соответствует моим потребностям.(или то, что я думал, что мне нужно.)

Я не знаю свою проблему или какой конкретный код мне нужно опубликовать, чтобы получить правильный тип ответов.Получая ответы, я могу опубликовать определенный код.

1 Ответ

0 голосов
/ 14 июня 2019

Каждый пользователь будет иметь коллекцию, вероятно, с именем пользователя в качестве имени коллекции.

Хотя возможно динамически создавать новую коллекцию для каждого пользователя, я бы не сталрекомендуем делать это, потому что любые специфичные для коллекции параметры (например, индексы) должны быть продублированы и обновлены во всех коллекциях.Вместо этого я бы создал отдельную коллекцию, использовал бы свойство типа userId для хранения информации о том, к какому пользователю принадлежит документ, и ускорил бы запросы к базе данных путем , создав индекс для этого свойства .

Если вы не знакомы с индексами, они, по сути, являются способом сказать: " Я буду часто запрашивать на основе этого свойства, запишите значения этого свойства отдельно, чтобы к ним можно было быстрее обращаться ".


Единственное, что я попробовал, - это поиск различных способов выполнения аутентификации, но мне хотелось бы получить некоторые рекомендации о том, с чего начать

Подходдовольно популярным в этом виде стека является использование JSON Web Tokens .Вот краткий обзор того, как вы могли бы реализовать их в своем приложении:

  1. Придумайте своего рода пароль для надежной подписи токенов.Это может быть строка случайных символов.Сохраните его там, где ваше приложение Express может прочитать его (например, файл .env).Это ваш ключ.

  2. Когда пользователь входит в систему с вашего внешнего интерфейса Vue.js, на ваш сервер Express отправляется запрос на подтверждение имени пользователя и пароля (убедитесь, чтонадежно хранить пароли с помощью чего-то вроде bcrypt ).Если учетные данные верны, вы можете создать объект, содержащий идентификатор пользователя и дополнительную информацию, которую вы можете использовать во внешнем интерфейсе (например, { id: 'myuserid', name: 'John Doe' }).Затем вы можете создать токен с объектом в качестве полезной нагрузки и вашим ключом и вернуть его в ответ на запрос.

  3. Теперь интерфейс может хранитьтокен в виде файла cookie или в localStorage, а затем присоединять его к каждому запросу через заголовок.Так как вы планируете использовать Axios, вот как вы это сделаете:

    axios.defaults.headers.common['Authorization'] = 'Bearer ' + token
    
  4. Когда вы сейчас делаете запрос, ваш сервер Express может просто получить токениз заголовка проверьте его и извлеките полезную нагрузку, которую мы создали ранее.Поскольку токен был подписан с помощью ключа, вы можете доверять содержимому и использовать его, например, для получения пользовательских данных, передавая payload.id в запрос к базе данных.Такая логика обычно выполняется в промежуточном программном обеспечении, поэтому все маршруты ваших приложений не должны беспокоиться о как ваша аутентификация.

...