authRoutes function
void
authRoutes(
- Router router
)
Implementation
void authRoutes(Router router) {
router.get('/login', middleware: [Guest.middleware], (request) async {
return request.view("auth.login");
});
router.get('/register', middleware: [Guest.middleware], (request) async {
return request.view("auth.register");
});
router.post('/register', middleware: [Guest.middleware], (request) async {
try {
final form = request.form();
final name = await form.input('name');
final email = await form.input('email');
final password = await form.input('password');
if (name == null ||
name.toString().isEmpty ||
email == null ||
email.toString().isEmpty ||
password == null ||
password.toString().isEmpty) {
return request.redirectBack();
}
final userRecord = await Model.firstWhere<User>(
field: "email",
value: email,
);
if (userRecord != null) return request.redirectBack();
final user = User(name: name, email: email, password: password);
await user.save();
return request.redirectToLogin();
} catch (e) {
return request.redirectBack();
}
});
router.post('/login', (request) async {
try {
final form = request.form();
final email = await form.input('email');
final password = await form.input('password');
if (email == null ||
email.toString().isEmpty ||
password == null ||
password.toString().isEmpty) {
return request.redirectBack();
}
if (await Auth.login(email: email, password: password)) {
final cookie = Cookie('archery_session', App.generateKey())
..httpOnly = true
..secure =
true // only over HTTPS
..sameSite = SameSite.lax;
final sessions = App().container.tryMake<List<AuthSession>>();
final session = sessions?.firstWhereOrNull(
(session) => session.email == email,
);
if (session != null) {
session.cookie = cookie;
request.response.cookies.add(cookie);
}
return request.redirectToDashboard();
}
return request.redirectBack();
} catch (e) {
return request.redirectBack();
}
});
router.get('/logout', (request) async {
await Auth.logout(request);
return request.redirectHome();
});
router.group(
prefix: "/user",
middleware: [Auth.middleware],
routes: () {
// - grouped for profile & dashboard crud
router.group(
prefix: "/profile",
routes: () {
router.get("/", (request) async {
return request.view("auth.user.profile");
});
},
);
router.group(
prefix: "/dashboard",
routes: () {
router.get("/", (request) async {
return request.view("auth.user.dashboard");
});
},
);
},
);
}