Skip to content

Commit e1aa3ad

Browse files
committed
✨ Enhance Login Functionality with Remember Me and Error Handling
1 parent d2926bb commit e1aa3ad

3 files changed

Lines changed: 18 additions & 12 deletions

File tree

app/controllers/auth/login_controller.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,33 @@ import { loginValidator } from '#validators/login_validator'
22
import { HttpContext } from '@adonisjs/core/http'
33
import User from '#models/user'
44
import { errors } from '@adonisjs/auth'
5+
56
export default class LoginController {
67
async show({ inertia }: HttpContext) {
78
return inertia.render('auth/login')
89
}
910

1011
async login({ request, auth, response, session }: HttpContext) {
11-
const data = await loginValidator.validate(request.all())
12-
const user = await User.verifyCredentials(data.email, data.password)
13-
1412
try {
15-
await auth.use('web').login(user)
13+
// Validate the request data
14+
const data = await loginValidator.validate(request.all())
15+
16+
// Attempt to verify credentials
17+
const user = await User.verifyCredentials(data.email, data.password)
18+
19+
// Login the user
20+
await auth.use('web').login(user, data.remember)
21+
1622
return response.redirect().toRoute('dashboard')
1723
} catch (error) {
1824
if (error instanceof errors.E_INVALID_CREDENTIALS) {
1925
session.flash('errors', { form: 'Invalid credentials' })
2026
return response.redirect().back()
2127
}
22-
throw error
28+
29+
// Handle other errors
30+
session.flash('errors', { form: 'An error occurred during login' })
31+
return response.redirect().back()
2332
}
2433
}
2534

app/models/user.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import { DateTime } from 'luxon'
2-
import { BaseModel, beforeSave, column, hasMany } from '@adonisjs/lucid/orm'
2+
import { BaseModel, column, hasMany } from '@adonisjs/lucid/orm'
33
import { compose } from '@adonisjs/core/helpers'
44
import hash from '@adonisjs/core/services/hash'
55
import { withAuthFinder } from '@adonisjs/auth/mixins/lucid'
66
import type { HasMany } from '@adonisjs/lucid/types/relations'
77
import Article from '#models/article'
8+
import { DbRememberMeTokensProvider } from '@adonisjs/auth/session'
89

910
const AuthFinder = withAuthFinder(() => hash.use('scrypt'), {
1011
uids: ['email'],
@@ -57,12 +58,7 @@ export default class User extends compose(BaseModel, AuthFinder) {
5758
@hasMany(() => Article)
5859
declare articles: HasMany<typeof Article>
5960

60-
@beforeSave()
61-
static async hashPassword(user: User) {
62-
if (user.$dirty.password) {
63-
user.password = await hash.make(user.password)
64-
}
65-
}
61+
static rememberMeTokens = DbRememberMeTokensProvider.forModel(User)
6662

6763
/**
6864
* Serialize the model for Inertia

config/auth.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const authConfig = defineConfig({
77
guards: {
88
web: sessionGuard({
99
useRememberMeTokens: true,
10+
rememberMeTokensAge: '1 year',
1011
provider: sessionUserProvider({
1112
model: () => import('#models/user'),
1213
}),

0 commit comments

Comments
 (0)