Middleware
Middleware wordt uitgevoerd vóórdat een verzoek de controller bereikt. Het kan het verzoek aanpassen, parameters toevoegen of het antwoord stoppen.
Een middleware aanmaken
import 'package:finch/finch_route.dart';
class AuthMiddleware extends Middleware {
@override
Future<MiddlewareResult> handle(FinchRequest rq) async {
var token = rq.headers['authorization']?.first ?? '';
if (token.isEmpty) {
return MiddlewareResult.stop(
rq.renderData(
data: {'error': 'Authenticatie vereist'},
statusCode: 401,
),
);
}
var user = await UserService.verifyToken(token);
if (user == null) {
return MiddlewareResult.stop(
rq.renderData(
data: {'error': 'Ongeldig token'},
statusCode: 401,
),
);
}
// Gebruiker toevoegen aan verzoekparameters
rq.addParam('currentUser', user);
return MiddlewareResult.next();
}
}
MiddlewareResult-retourwaarden
| Waarde | Gedrag |
|---|---|
MiddlewareResult.next() |
Doorgaan naar volgende middleware/controller |
MiddlewareResult.stop(response) |
Verwerking stoppen en antwoord teruggeven |
Middleware koppelen aan een route
In de constructor
router.get(
'/dashboard',
DashboardController().index,
middlewares: [AuthMiddleware()],
);
Vloeiend
router
.get('/dashboard', DashboardController().index)
.middleware(AuthMiddleware());
Middleware voor een bovenliggende route
router.group('/api', (r) {
r.get('/users', UserController().index);
r.post('/users', UserController().store);
}).middleware(ApiAuthMiddleware());
Toegang tot verzoek in controller
Future<String> index() async {
var user = rq.getParam<User>('currentUser');
// Gebruik user...
}