Docs Menu
Docs Home
/ /
Administrar usuarios

Autenticar usuarios - SDK de React Native

@realm/react Tiene ganchos para la autenticación de usuarios. useAuth y useEmailPasswordAuth manejan la autenticación con proveedores de autenticación habilitados.

Para una useAuth referencia rápida, consulta el enlace useAuth en esta página. Para una referencia useEmailPasswordAuth rápida, consulta el enlace useEmailPasswordAuth en la página "Administrar usuarios de correo electrónico/contraseña".

También puedes usar directamente las APIs de Realm.js. Instancia un objeto Credenciales y pásalo a App.logIn() para autenticarte y obtener un objeto Usuario.

Antes de poder autenticar a un usuario, debe:

@realm/react Tiene proveedores y enlaces para la autenticación de usuarios. Para configurar la autenticación de usuarios:

  1. Configurar @realm/react proveedores.

  2. Escriba un componente de respaldo para UserProvider.

Los componentes encapsulados por AppProvider pueden acceder a los ganchos useApp y useAuth. Estos componentes solo se renderizan si AppProvider se conecta correctamente al backend de App Services.

Los componentes encapsulados por UserProvider pueden acceder a usuarios autenticados con el gancho useUser. Estos componentes solo se renderizan si la aplicación tiene un usuario autenticado.

Para configurar la autenticación de usuario:

  1. Envuelva todos los componentes que necesitan acceder a App Services en AppProvider.

  2. Dentro de AppProvider, envuelva todos los componentes a los que desea que tenga acceso un usuario autenticado con UserProvider.

  3. En UserProvider, incluya una propiedad fallback con un componente que inicie sesión a un usuario. La aplicación representa este componente si no hay ningún usuario autenticado.

import React from 'react';
import {AppProvider, UserProvider} from '@realm/react';
// Fallback log in component that's defined in another file.
import {LogIn} from './Login';
export const LoginExample = () => {
return (
<ScrollView>
<AppProvider id={APP_ID}>
{/* If there is no authenticated user, mount the
`fallback` component. When user successfully
authenticates, the app unmounts the `fallback`
component (in this case, the `LogIn` component). */}
<UserProvider fallback={LogIn}>
{/* Components inside UserProvider have access
to the user. These components only mount if
there's an authenticated user. */}
<UserInformation />
</UserProvider>
</AppProvider>
</ScrollView>
);
};

Si tu aplicación no tiene un usuario autenticado ni conectado, UserProvider y sus elementos secundarios no se renderizarán. Para solucionar este caso, puedes pasar un componente de respaldo a UserProvider. Esta suele ser la pantalla de inicio de sesión de las aplicaciones.

El siguiente ejemplo utiliza autenticación anónima, pero puede utilizar cualquiera de los métodos useAuth.

Para escribir un componente de respaldo de autenticación para UserProvider:

  1. Crear un componente funcional.

  2. Desestructurar logInWithAnonymous y result del gancho useAuth.

  3. Llamar a logInWithAnonymous() dentro de un bloque useEffect que tiene una matriz de dependencia vacía.

  4. Manejar result. Si la autenticación no se realiza correctamente, puede escribir un manejo de errores basado en result.

export const LogIn = () => {
// `logInWithAnonymous` logs in a user using an
// anonymous Realm Credential.
// `result` gives us access to the result of the
// current operation. In this case, `logInWithAnonymous`.
const {logInWithAnonymous, result} = useAuth();
// Log in an anyonmous user on component render.
// On successful login, this fallback component unmounts.
useEffect(() => {
logInWithAnonymous();
}, [])
return (
<View >
{!result.error && <Text>Please log in</Text>}
<View>
{result.pending && <ActivityIndicator />}
{result.error && <ErrorComponent error={result.error} />}
</View>
</View>
);
};

El SDK de React Native se comunica con Atlas App Services para gestionar sesiones con tokens de acceso y tokens de actualización.

Para obtener más información sobre la gestión de sesiones, consulte Sesiones de usuario en la documentación de App Services.

Después de configurar la autenticación de usuario en su cliente y los proveedores de autenticación en su aplicación App Services, puede iniciar sesión con los usuarios.

El proveedor anónimo permite a los usuarios iniciar sesión en su aplicación con cuentas temporales que no tienen información asociada.

Al llamar a un método de autenticación cuando un usuario está conectado actualmente, cambia el usuario actual al nuevo usuario.

Si llama a logInWithAnonymous() en la reserva de UserProvider, los hijos de UserProvider se procesan tan pronto como el inicio de sesión anónimo se realiza correctamente.

Para iniciar sesión como usuario anónimo:

  1. Desestructurar logInWithAnonymous y result del gancho useAuth.

  2. Llama a logInWithAnonymous() sin ningún argumento.

  3. Manejar el result.

export const LogInWithAnonymous = () => {
const {logInWithAnonymous, result} = useAuth();
const performAnonymousLogin = logInWithAnonymous;
// Handle `result`...
};

El proveedor de autenticación de correo electrónico/contraseña permite a los usuarios iniciar sesión en su aplicación con una dirección de correo electrónico y una contraseña.

Puedes usar el useEmailPasswordAuth enlace para gestionar el inicio de sesión de los usuarios en tu cliente. Para una useEmailPasswordAuth referencia rápida a, consulta el enlace useEmailPasswordAuth en la página "Administrar usuarios de correo electrónico/contraseña".

Para iniciar sesión como usuario con correo electrónico y contraseña:

  1. Desestructurar logIn y result del gancho useEmailPasswordAuth.

  2. Pase el correo electrónico y la contraseña del usuario a LogIn() como un objeto.

  3. Manejar el result.

export const LoginWithEmail = () => {
const {logIn, result} = useEmailPasswordAuth();
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const performLogin = () => {
logIn({email, password});
};
// Handle `result`...
};

El proveedor de autenticación de clave API permite que los procesos del servidor accedan a su aplicación directamente o en nombre de un usuario.

Antes de poder iniciar sesión como usuario con una clave API, debe crear una clave API.

Para iniciar sesión con una clave API:

  1. Desestructurar loginWithApiKey y result del gancho useAuth.

  2. Pase su clave API a loginWithApiKey().

const loginApiKeyUser = async (apiKey: ApiKey) => {
try {
logInWithApiKey(apiKey!.key);
} catch (error) {
console.log(error);
}
};

El proveedor de autenticación JWT personalizado maneja la autenticación del usuario con cualquier sistema de autenticación que devuelva un token web JSON.

Para iniciar sesión con un usuario JWT personalizado:

  1. Configure el proveedor de autenticación JWT en su backend de App Services.

  2. Obtenga un JWT de un sistema externo.

  3. Desestructurar logInWithJWT y result del gancho useAuth.

  4. Pase el JWT a logInWithJWT().

  5. Manejar el result.

export const LogInWithJWT = () => {
const {logInWithJWT, result} = useAuth();
// Get the current anonymous user so we can call
// an App Services Function later.
const anonymousUser = useUser();
const performJWTLogin = async () => {
// Get a JWT from a provider. In this case, from
// an App Services Function called "generateJWT".
const token = (await anonymousUser.functions.generateJWT()) as string;
logInWithJWT(token);
};
// Handle `result`...
};

El proveedor de autenticación de funciones personalizadas permite gestionar la autenticación de usuarios mediante la ejecución de una función que recibe una carga útil con información arbitraria sobre el usuario.Consulte Autenticación de funciones personalizadas para obtener más información.

Para iniciar sesión como usuario con el proveedor de funciones personalizadas:

  1. Cree una función de App Services para gestionar sus necesidades de autenticación.

  2. Habilite el proveedor de funciones personalizadas para su aplicación de servicios de aplicaciones y configúrelo para usar la función que creó anteriormente.

  3. Desestructurar logInWithFunction y result del gancho useAuth.

  4. Pase cualquier dato de usuario relevante (como un nombre de usuario) a logInWithFunction().

  5. Manejar el result.

export const LogInWithFunction = () => {
const {logInWithFunction, result} = useAuth();
const performFunctionLogin = async (email: string, password: string) => {
// Pass arbitrary information to the Atlas function configured
// for your App's Custom Function provider.
logInWithFunction({email, password});
};
// Handle `result`...
};

El proveedor de autenticación de Facebook le permite autenticar usuarios a través de una aplicación de Facebook utilizando su cuenta de Facebook existente.

Para iniciar sesión un usuario con una cuenta de Facebook existente, debe configurar y habilitar el proveedor de autenticación de Facebook para su aplicación de Servicios de aplicaciones.

Importante

No almacene las URL de las imágenes de perfil de Facebook

Las URL de las fotos de perfil de Facebook incluyen el token de acceso del usuario para otorgar permiso a la imagen. Para garantizar la seguridad, no guardes una URL que incluya el token de acceso del usuario. En su lugar, accede a la URL directamente desde los campos de metadatos del usuario cuando necesites obtener la imagen.

Puedes utilizar el SDK oficial de Facebook Para gestionar la autenticación del usuario y redirigir el flujo desde una aplicación cliente. Una vez autenticado, el SDK de Facebook devuelve un token de acceso que puedes enviar a tu aplicación React Native y usar para finalizar el inicio de sesión del usuario.

export const LogInWithFacebook = () => {
const {logInWithFacebook, result} = useAuth();
const performLogin = () => {
// Get an access token using the Facebook SDK.
// You must define this function.
const token = getFacebookToken();
logInWithFacebook(token);
};
// Handle `result`...
};

El proveedor de autenticación de Google le permite autenticar a los usuarios con su cuenta de Google existente.

Para autenticar a un usuario de Google, debes configurar el proveedor de autenticación de Google para tu aplicación de Servicios de aplicaciones.

No existe una integración oficial de Iniciar sesión con Google para React Native. La forma más sencilla de integrar Iniciar sesión con Google en tu aplicación React Native con autenticación Realm es usar una biblioteca de terceros. También puedes crear tu propia solución con los Servicios de Identidad de Google para gestionar la autenticación de usuarios y redirigir el flujo desde una aplicación cliente.

Independientemente de la implementación, debes recuperar un token de ID del servidor de autorización de Google. Úsalo para iniciar sesión en Realm.

export const LogInWithGoogle = () => {
const {logInWithGoogle, result} = useAuth();
const performLogin = () => {
// Get an access token using a third-party library
// or build your own solution. You must define this function.
const token = getGoogleToken();
logInWithGoogle(token);
};
// Handle `result`...
};

El proveedor de autenticación de Apple le permite autenticar usuarios a través de Iniciar sesión con Apple.

Para autenticar a un usuario de Apple, debes configurar el proveedor de autenticación de Apple para tu aplicación App Services.

Puedes usar el SDK oficial de Iniciar sesión con Apple JS para gestionar la autenticación del usuario y redirigir el flujo desde una aplicación cliente. Una vez autenticado, el SDK de Apple JS devuelve un token de ID que puedes enviar a tu app React Native y usar para finalizar el inicio de sesión del usuario.

export const LogInWithApple = () => {
const {logInWithApple, result} = useAuth();
const performLogin = () => {
// Get an access token using the Apple SDK.
// You must define this function.
const token = getAppleToken();
logInWithApple(token);
};
// Handle `result`...
};

Tip

Si recibe un error Login failed que indica que token contains an invalid number of segments, verifique que esté pasando una versión de cadena codificada en UTF-8del JWT.

Cuando tu aplicación Realm autentica a un usuario, almacena en caché las credenciales del usuario. Puedes comprobar si existen credenciales de usuario para omitir el flujo de inicio de sesión y acceder al usuario almacenado en caché. Usa esto para abrir un realm sin conexión.

Nota

El inicio de sesión inicial requiere una conexión de red

Cuando un usuario se registra en tu aplicación o inicia sesión por primera vez con una cuenta existente en un cliente, este debe tener conexión de red. Comprobar las credenciales de usuario en caché permite abrir un reino sin conexión, pero solo si el usuario ha iniciado sesión previamente con conexión.

// Log user into your App Services App.
// On first login, the user must have a network connection.
const getUser = async () => {
// If the device has no cached user credentials, log in.
if (!app.currentUser) {
const credentials = Realm.Credentials.anonymous();
await app.logIn(credentials);
}
// If the app is offline, but credentials are
// cached, return existing user.
return app.currentUser!;
};

Para aprender a usar el usuario en caché en la configuración de sincronización y acceder a un reino sin conexión, lea la documentación Abrir un reino sincronizado sin conexión.

Cuando un usuario inicia sesión, Atlas App Services crea un token de acceso que le otorga acceso a su aplicación. El SDK de Realm administra automáticamente los tokens de acceso, los actualiza cuando caducan e incluye un token de acceso válido para el usuario actual con cada solicitud. Realm no actualiza automáticamente el token de actualización. Cuando este caduque, el usuario deberá volver a iniciar sesión.

Si envía solicitudes fuera del SDK, debe incluir el token de acceso del usuario con cada solicitud y actualizar manualmente el token cuando caduque.

Puede acceder y actualizar el token de acceso de un usuario que haya iniciado sesión en el SDK desde su objeto Realm.User, como en el siguiente ejemplo:

const RefreshUserAcessToken = () => {
const user = useUser();
const [accessToken, setAccessToken] = useState<string | null>();
// Gets a valid user access token to authenticate requests
const refreshAccessToken = async () => {
// An already logged in user's access token might be stale. To
// guarantee that the token is valid, refresh it if necessary.
await user.refreshCustomData();
setAccessToken(user.accessToken);
};
// Use access token...
};

Los tokens de actualización caducan tras un periodo determinado. Cuando caducan, el token de acceso ya no se puede actualizar y el usuario debe volver a iniciar sesión.

Si el token de actualización caduca después de abrir el dominio, el dispositivo no podrá sincronizarse hasta que el usuario vuelva a iniciar sesión. El controlador de errores de sincronización debe implementar una lógica que detecte un error de token caducado al intentar sincronizar y luego redirija a los usuarios a un flujo de inicio de sesión.

Para obtener información sobre cómo configurar la expiración del token de actualización, consulte Administrar sesiones de usuario en la documentación de App Services.

Para cerrar la sesión de cualquier usuario, llama al método User.logOut() en su instancia de usuario.

Advertencia

Cuando un usuario cierra sesión, ya no se pueden leer ni escribir datos en los dominios sincronizados que haya abierto. Por lo tanto, cualquier operación que no se haya completado antes de que el usuario cierre sesión no podrá completarse correctamente y probablemente generará un error. Los datos de una operación de escritura que falle de esta manera se perderán.

function UserInformation() {
const user = useUser();
const {logOut} = useAuth();
const performLogout = () => {
logOut();
};
// Add UI for logging out...
}

El useAuth gancho tiene un método de autenticación para cada proveedor de autenticación de App Services. También tiene un estado relacionado con la autenticación. Consulta la referencia de useAuth para obtener más información.

También puedes consultar la documentación de la @realm/react API para useAuth.

Volver

Crear y eliminar usuarios