Nano Hash - криптовалюты, майнинг, программирование

Как я могу отправить разных пользователей на отдельные контроллеры просмотра, используя firebase и Xcode

Я новичок в кодировании и начал использовать firebase в качестве внутреннего сервера для приложения, которое я создаю в Xcode, используя swift.

Само приложение будет иметь одну страницу входа, но 3 отдельных типа пользователей. Администратор будет иметь разные разрешения для двух других пользователей.

Код, который у меня сейчас есть:

FIRAuth.auth()?.signIn(withEmail: username!, password: password!, completion: { (user, error) in
    if error == nil {
        let vc = self.storyboard?.instantiateViewController(withIdentifier: "AdminVC")
        self.present(vc!, animated: true, completion: nil)                
    }

Код получает адрес электронной почты и пароль для страницы аутентификации. Но из-за трех разных типов пользователей я не хочу, чтобы все они переходили на контроллер представления «AdminVC».

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


  • Вы можете использовать блок операторов swich-case внутри блока else. Сравните имя пользователя с каждым случаем и соответствующим образом подготовьте vc. 31.12.2016
  • Нужно ли это делать с одним пользователем? 31.12.2016
  • Не каждый отдельный пользователь, а каждый отдельный тип пользователя. Я полагаю, у вас есть 5 типов всего вместе? 3 типа пользователей и 2 типа администратора? Затем настройте 5 случаев, где вы сравниваете логин с типом пользователя и соответственно показываете vc. Поправьте меня, если я ошибаюсь. 31.12.2016
  • Извините, я не ясно выразился в вопросе, у меня будет 3 типа пользователей. Администратор, учитель и ученик, так как на странице аутентификации отображаются только адрес электронной почты и пароль, которые я не знаю, как разделить 31.12.2016
  • их как 3 разных пользователей. в этом случае будет ли использоваться быстрый код, который проверяет, какая электронная почта зарегистрирована? 31.12.2016
  • Вы можете использовать электронную почту, если электронные письма значительно отличаются, НО лучшим способом было бы иметь пользовательскую переменную, которую вы можете сохранить в firebase, когда пользователь зарегистрируется. Итак, скажем, когда учитель регистрирует учетную запись в первый раз, вы можете сохранить ее как учителя. И когда учитель входит в систему, вы запрашиваете эту информацию с сервера и, используя эту информацию, отображаете контроллер представления, который лучше всего соответствует тому, что вы хотите показать. 31.12.2016
  • Задайте себе вопрос: если бы вы посмотрели на всех пользователей на сервере, как бы вы узнали, кто из них кто? По электронной почте? По дате регистрации? Как вы можете отличить пользователя от администратора и учителя? Это то, что вы должны настроить дело, чтобы быть. Надеюсь, это имеет смысл. 31.12.2016
  • Пользователи будут известны по их электронной почте. Проблема в том, что firebase показывает все электронные письма на странице аутентификации, поэтому код, который я использую, получает все электронные письма со страницы аутентификации. 31.12.2016
  • Вам нужно как-то классифицировать электронные письма... Это единственный способ представить только три отдельных vc.. 31.12.2016
  • если я поставлю в статусе if идентификатор пользователя администратора, и если это = электронная почта и пароль, отправленные в AdminVC, затем повторите это для учителей, может ли это сработать? 31.12.2016
  • кроме этого, я не знаю, как классифицировать электронные письма, и это то, с чем я застрял. 31.12.2016
  • Да, это может сработать, но это не очень хороший способ. Вы хотите сделать его достаточно абстрактным, чтобы никогда не проверять электронную почту, а только проверять роли. Если это базовое приложение, то вы можете обойтись без него. 31.12.2016

Ответы:


1

Если вы хотите сохранить тип для пользователя, вы должны использовать базу данных. Например, введите здесь описание изображения

Когда пользователь входит в систему, получите значение из базы данных для пути «users/‹userId›/type». Затем используйте оператор switch для перенаправления на правильный контроллер представления.

Вот полный код

 // Sign in to Firebase
 FIRAuth.auth()?.signIn(withEmail: "[email protected]", password: "Password123", completion: {
     (user, error) in
         // If there's no errors
         if error == nil {
             // Get the type from the database. It's path is users/<userId>/type.
             // Notice "observeSingleEvent", so we don't register for getting an update every time it changes.
             FIRDatabase.database().reference().child("users/\(user!.uid)/type").observeSingleEvent(of: .value, with: {
                 (snapshot) in

                 switch snapshot.value as! String {
                 // If our user is admin...
                 case "admin":
                     // ...redirect to the admin page
                     let vc = self.storyboard?.instantiateViewController(withIdentifier: "adminVC")
                     self.present(vc!, animated: true, completion: nil)
                 // If out user is a regular user...
                 case "user":
                     // ...redirect to the user page
                     let vc = self.storyboard?.instantiateViewController(withIdentifier: "userVC")
                     self.present(vc!, animated: true, completion: nil)
                 // If the type wasn't found...
                 default:
                     // ...print an error
                     print("Error: Couldn't find type for user \(user!.uid)")
                 }
            })
        }
    })

Вместо всего оператора switch вы можете сделать

let vc = self.storyboard?.instantiateViewController(withIdentifier: "\(snapshot.value)_View")
self.present(vc!, animated: true, completion: nil)

Предупреждение! Это приведет к сбою, если тип не будет найден. Но это поправимо :)

31.12.2016
  • поскольку я также новичок в firebase, мне также трудно добавлять данные в раздел базы данных, поскольку я впервые работаю с деревьями JSON. Можно ли показать мне, как я могу вводить типы пользователей в базу данных. 02.01.2017
  • В операторе switch, если запускается блок по умолчанию, это означает, что данных нет (поскольку мы будем вводить только admin или user, вы можете добавить столько типов, сколько хотите) и это новый пользователь. Здесь вы можете установить тип с помощью FIRDatabase.database().reference().child(users).child(user.uid).setValue([type: ‹type here›]) 02.01.2017
  • что, если бы я вручную вводил данные в базу данных через консоль firebase? это все еще будет работать? 02.01.2017
  • Да, и это имело бы больше смысла, поскольку вы не хотите, чтобы пользователь мог выбрать роль администратора :) 02.01.2017
  • Это будет немного в тему. Если у вас есть дополнительные вопросы, вы можете проверить мой профиль для другого способа связаться со мной :) 02.01.2017
  • Я пытался добавить информацию в базу данных в течение часа, каждый раз, когда я пытаюсь добавить другой тип («учитель») в узел «пользователь», тип администратора исчезает. это так расстраивает :( 02.01.2017
  • У вас может быть только один тип ключа... но псст ^^ 02.01.2017
  • Спасибо, я отправил письмо :) 02.01.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..