Skip to content

Instantly share code, notes, and snippets.

@seccomiro
Created May 9, 2021 23:24
Show Gist options
  • Save seccomiro/80e7598031b91d59c61c9c6c669a463f to your computer and use it in GitHub Desktop.
Save seccomiro/80e7598031b91d59c61c9c6c669a463f to your computer and use it in GitHub Desktop.
AdonisJs v5 Authentication snippets
...
<ul class="navbar-nav">
@if(auth.isLoggedIn)
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
{{ auth.user?.name }}
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="{{ route('auth.logout') }}">Sair</a></li>
</ul>
</li>
@else
<li class="nav-item">
<a class="nav-link" href="{{ route('auth.login') }}">Login</a>
</li>
<li class="nav-item">
<a class="nav-link" href="{{ route('auth.register') }}">Registrar</a>
</li>
@endif
</ul>
...
import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
import User from 'App/Models/User'
export default class AuthController {
public async register({ view }: HttpContextContract) {
return view.render('auth/register')
}
public async store({ request, response, auth, session }: HttpContextContract) {
const data = request.only(['name', 'email', 'password'])
try {
const user = await User.create(data)
await auth.login(user, true)
} catch (error) {
session.flash('errors', 'Erro no registro. Verifique suas informações.')
return response.redirect().toRoute('auth.register')
}
response.redirect().toRoute('root')
}
public async login({ view }: HttpContextContract) {
return view.render('auth/login')
}
public async verify({ request, response, auth }: HttpContextContract) {
const data = request.only(['email', 'password', 'remember'])
await auth.attempt(data.email, data.password, data.remember === 'true')
response.redirect().toRoute('root')
}
public async logout({ response, auth }: HttpContextContract) {
await auth.logout()
response.redirect().toRoute('root')
}
}
@layout('layout/app')
@section('content')
@if(flashMessages.has('auth.errors'))
<div class="alert alert-danger">Login ou senha inválidos</div>
@endif
<div class="row d-flex justify-content-center">
<div class="col-4">
<main class="form-signin">
<form action="{{ route('auth.verify') }}" method="post">
<h1 class="h3 mb-3 fw-normal">Login</h1>
<div class="form-floating mb-1">
<input type="email" class="form-control" name="email" id="email" placeholder="nome@exemplo.com" autofocus>
<label for="email">Email</label>
</div>
<div class="form-floating mb-1">
<input type="password" class="form-control" name="password" id="password" placeholder="Senha">
<label for="password">Senha</label>
</div>
<div class="checkbox mb-3">
<label>
<input type="checkbox" name="remember" value="true"> Lembrar de mim
</label>
</div>
<button class="w-100 btn btn-lg btn-primary" type="submit">Login</button>
</form>
</main>
</div>
</div>
@endsection
@layout('layout/app')
@section('content')
@if(flashMessages.has('errors'))
<div class="alert alert-danger">{{ flashMessages.get('errors') }}</div>
@endif
<div class="row d-flex justify-content-center">
<div class="col-4">
<main class="form-signin">
<form action="{{ route('auth.store') }}" method="post">
<h1 class="h3 mb-3 fw-normal">Registre-se</h1>
<div class="form-floating mb-1">
<input type="text" class="form-control" name="name" id="name" placeholder="Nome" autofocus>
<label for="name">Nome</label>
</div>
<div class="form-floating mb-1">
<input type="email" class="form-control" name="email" id="email" placeholder="nome@exemplo.com">
<label for="email">Email</label>
</div>
<div class="form-floating mb-1">
<input type="password" class="form-control" name="password" id="password" placeholder="Senha">
<label for="password">Senha</label>
</div>
<button class="w-100 btn btn-lg btn-primary" type="submit">Registrar</button>
</form>
</main>
</div>
</div>
@endsection
import Route from '@ioc:Adonis/Core/Route'
Route.group(() => {
Route.resource('tasks', 'TasksController')
Route.get('/tasks/:id/done', 'TasksController.done').as('tasks.done')
}).middleware('auth')
Route.get('/register', 'AuthController.register').as('auth.register')
Route.post('/register', 'AuthController.store').as('auth.store')
Route.get('/login', 'AuthController.login').as('auth.login')
Route.post('/login', 'AuthController.verify').as('auth.verify')
Route.get('/logout', 'AuthController.logout').as('auth.logout')
Route.get('/', 'HomeController.index').as('root')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment