1.1.21 • Published 3 months ago

nextjs-firebase-auth v1.1.21

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

Uso

Primeiro, vamos importar o nosso pacote.

import * as NFA from 'nextjs-firebase-auth';

Agora vamos definir os tipos de usuários e o modelo do usuário.

interface User {
   id: string;
   name: string;
   email: string;
   phone: number;
   photoURL: string | null;
   createdAt: string;
}

type UserRole = 'user' | 'admin';

Feito isso podemos criar um contexto que irá retornar o nosso AuthProvider, passando para ele as propriedades necessárias.

interface ContextProps {
   children: React.ReactNode | JSX.Element;
}

if (!firebase.getApps().length) firebase.initializeApp(firebaseConfig);
const app = firebase.getApp();

export function AuthProvider(props: ContextProps) {
   return (
      // Estamos passando aqui os parâmetros de tipo
      <NFA.AuthProvider<UserRole, User>
         // Id único para cada projeto
         appId="unique-project-id"
         // Componente que será renderizado quando a autenticação estiver carregando
         loader={LoadingFullScreen}
         // Objeto com os tipos de usuários com os seus nomes personalizados
         roles={{
            user: 'Usuário',
            admin: 'Administrador',
         }}
         // Rotas que o fluxo de validação da autenticação será pulada
         disabledAuthRoutes={['/login']}
         // Rotas privadas da aplicação (Importante incluir todas)
         privateRoutes={['/dashboard*', '/panel*']}
         // Rotas públicas da aplicação (Importante incluir todas)
         publicRoutes={['/', '/login', '/register', '/forgot-password']}
         // Permissões para cada tipo de usuário
         permissions={{
            admin: {
               role: 'admin',
               mainRoute: '/dashboard',
               allowedRoutes: ['*'],
               restrictedRoutes: [],
            },
            user: {
               role: 'user',
               mainRoute: '/panel',
               allowedRoutes: ['/panel*'],
               restrictedRoutes: [],
            },
         }}
         // Firebase app
         firebaseApp={app}
      >
         {props.children}
      </NFA.AuthProvider>
   );
}

Agora só precisamos configurar e exportar o nosso hook useAuth passando para ele os nossos parâmetros de tipo.

export const useAuth = () => NFA.useNFA<UserRole, User>();

Pronto, o seu contexto de autenticação deve ter ficado mais ou menos assim.

import * as NFA from 'nextjs-firebase-auth';
import * as firebase from 'firebase/app';

import LoadingFullScreen from 'components/LoadingFullScreen';
import { firebaseConfig } from '../../firebaseConfig';

interface ContextProps {
   children: React.ReactNode | JSX.Element;
}

interface User {
   id: string;
   name: string;
   email: string;
   phone: number;
   photoURL: string | null;
   enterpriseId: string;
   createdAt: string;
}

type UserRole = 'user' | 'admin';

if (!firebase.getApps().length) firebase.initializeApp(firebaseConfig);
const app = firebase.getApp();

export function AuthProvider(props: ContextProps) {
   return (
      <NFA.AuthProvider<UserRole, User>
         appId="unique-project-id"
         loader={LoadingFullScreen}
         roles={{
            user: 'Usuário',
            admin: 'Administrador',
         }}
         disabledAuthRoutes={['/login']}
         permissions={{
            admin: {
               role: 'admin',
               mainRoute: '/dashboard',
               allowedRoutes: ['*'],
               restrictedRoutes: [],
            },
            user: {
               role: 'user',
               mainRoute: '/panel',
               allowedRoutes: ['/panel*'],
               restrictedRoutes: [],
            },
         }}
         privateRoutes={['/dashboard*', '/panel*']}
         publicRoutes={['/', '/login', '/register', '/forgot-password']}
         firebaseApp={app}
      >
         {props.children}
      </NFA.AuthProvider>
   );
}

export const useAuth = () => NFA.useNFA<UserRole, User>();
1.1.21

3 months ago

1.1.16

3 months ago

1.1.19

3 months ago

1.1.18

3 months ago

1.1.17

3 months ago

1.1.20

3 months ago

1.1.15

4 months ago

1.1.12

4 months ago

1.1.11

4 months ago

1.1.10

4 months ago

1.1.14

4 months ago

1.1.13

4 months ago

1.1.1

6 months ago

1.1.9

6 months ago

1.1.8

6 months ago

1.1.7

6 months ago

1.1.6

6 months ago

1.1.5

6 months ago

1.1.4

6 months ago

1.1.3

6 months ago

1.1.2

6 months ago

1.0.32

6 months ago

1.0.31

6 months ago

1.0.30

6 months ago

1.0.29

1 year ago

1.0.28

1 year ago

1.0.27

1 year ago

1.0.26

1 year ago

1.0.25

1 year ago

1.0.24

1 year ago

1.0.23

1 year ago

1.0.22

1 year ago

1.0.21

1 year ago

1.0.20

1 year ago

1.0.19

1 year ago

1.0.18

1 year ago

1.0.17

1 year ago

1.0.16

1 year ago

1.0.15

1 year ago

1.0.14

1 year ago

1.0.13

1 year ago

1.0.12

1 year ago

1.0.11

1 year ago

1.0.10

1 year ago

1.0.9

1 year ago

1.0.8

1 year ago

1.0.7

1 year ago

1.0.6

1 year ago

1.0.5

1 year ago

1.0.4

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago