authRoutes function
Registers Archery's built-in authentication routes onto the provided router.
Routes include:
GET /login(guest-only)POST /loginGET /register(guest-only)POST /register
These routes assume the bundled auth views exist (e.g. auth.login, auth.register)
and that the User model is available for persistence.
Implementation
void authRoutes(Router router) {
router.group(
routes: () {
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', (request) async {
try {
final validated = await request.validateAll([{
"email": [
Rule.required,
Rule.email,
Rule.max(255),
Rule.unique<User>(column: "email")],}, {
"name": [
Rule.required,
Rule.min(3),
Rule.max(100)],},{
"password": [
Rule.required,
Rule.min(6),
Rule.max(50)],},]
);
if (!validated) {
return request.redirectBack();
}
final form = request.form();
final name = await form.input('name');
final email = await form.input('email');
final password = await form.input('password');
final userRecord = await Model.firstWhere<User>(field: "email", value: email);
if (userRecord != null) {
request.flash(key: "error", message: "User exists");
return request.redirectToLogin();
}
final user = User(name: name, email: email, password: password);
await user.save();
request.flash(key: "success", message: "Account created");
return request.redirectToLogin();
} catch (e, stack) {
App().archeryLogger.error("Registration error", {"origin": "authRoutes post /register", "error": e.toString(), "stack": stack.toString()});
request.flash(key: "error", message: "Something went wrong");
return request.redirectBack();
}
});
router.post('/login', (request) async {
try {
final validated = await request.validateAll([{
"email": [
Rule.required,
Rule.email,
Rule.max(255)],},{
"password": [
Rule.required,
Rule.max(50)],
},
]);
if (!validated) {
return request.redirectBack();
}
final form = request.form();
final email = await form.input('email');
final password = await form.input('password');
if (await Auth.login(request: request, email: email, password: password)) {
return request.redirectToDashboard();
}
request.flash(key: "error", message: "Invalid credentials");
return request.redirectBack();
} catch (e, stack) {
App().archeryLogger.error("Login error", {"origin": "authRoutes post /login", "error": e.toString(), "stack": stack.toString()});
request.flash(key: "error", message: "Invalid credentials");
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");
});
},
);
},
);
},
);
}