Estoy tratando de hacer una pantalla de inicio de sesión e hice una base de datos con Firebase de Google. La forma en que traté de crear cuentas en la base de datos es simplemente creando un nuevo elemento secundario que es "Usuarios" y luego el siguiente elemento secundario sería un usuario (que se define de forma única con un nombre de usuario único). Luego, el usuario tiene otros atributos y un atributo llamado loginIn que se establece en String 'false' pero cuando se inicia sesión, Screen login se establece correctamente en String 'true'. ¿Cómo puedo saber después del inicio de sesión y cuándo ese LoginViewController desaparece qué cuenta ha iniciado sesión exactamente en ese teléfono (simulador en ese momento) porque puede haber más usuarios a la vez con el valor de atributo 'loginIn' establecido en 'verdadero' y porque de eso no puede volver a la base de datos para verificar eso. Soy realmente nuevo en esto y no sé si todo este enfoque está bien haciendo en la base de datos en tiempo real algo así y realmente verificando eso por el atributo. ¿Tal vez tengo que usar algún tipo de base de datos local o algo similar?

Swift 4, desarrollo iOS, Xcode 9

0
mn497 6 mar. 2018 a las 20:27

3 respuestas

La mejor respuesta

Si solo desea conservar localmente el estado de inicio de sesión, puede usar UserDefaults. Simplemente tenga una clave llamada currentUser y establezca el valor como su ID único. Una vez que un usuario cierra sesión, simplemente borre esa clave. También puede usar eso para determinar si se inicia la pantalla de inicio de sesión cuando se abre la aplicación.

Pero puede ser mejor usar algo como AWS Cognito o servicios similares para manejar la administración de usuarios.

¿Estás creando una aplicación iOS solamente o un proyecto multiplataforma?

0
Yoni Reiss 6 mar. 2018 a las 18:55

Tengo una clase llamada LoginManager, definida como un NSObject. Se incluye una variable de cadena opcional llamada accessToken con funciones setter y getter para guardar y recuperar mi token de acceso, incluida una opción para borrar el token que se usaría al cerrar sesión. También hay una función para verificar el estado de la clave.

var accessToken: String? {
    get {
            return //key from storage
        }

    set {
        if newValue == nil {
            //remove key from storage
        } else {
            //save key to storage
        }
    }
}

func isUserLogedIn() -> Bool {
    return self.accessToken != nil
}

En mi propio caso, tengo un objeto administrador de aplicaciones que cambia el controlador de vista raíz en función de esta información.

LoginManager.singleton.isUserLogedIn() ? loadMainView() : loadLoginView()

Por lo tanto, el controlador de vista resultante nunca se carga a menos que el usuario haya iniciado sesión. ¿Es útil para usted?

0
GntlmnBndt 6 mar. 2018 a las 19:05

No estoy seguro de que esta sea la respuesta perfecta para ti. Sin embargo, algunas de mis aplicaciones usan CloudKit y el inicio de sesión se autentica y solo entonces abre áreas de la aplicación en el dispositivo del usuario. Estoy seguro de que si desea verificar el estado de los inicios de sesión exitosos, la autenticación en la nube podría actualizarse como confirmación y posteriormente podría acceder a la base de datos en la nube utilizando el Panel de CloudKit.

Es bastante intuitivo y funciona a la perfección con Xcode.

0
rmaddy 6 mar. 2018 a las 18:37