मैं पैकेज shelf_rpc
पैकेज के साथ उपयोग कर रहा हूं।कुछ प्रक्रियाओं के लिए डार्ट आरपीसी और शेल्फ_एथ का उपयोग
मेरे कुछ संसाधनों को प्रमाणीकरण की आवश्यकता है। मैंने JWT के साथ जाने का फैसला किया और JwtSessionHandler
shelf_auth
से उपयोग करना चाहते हैं।
मेरे सरलीकृत सेटअप इस तरह दिखता है:
final ApiServer _apiServer = new ApiServer();
main() async {
var loginMiddleware = authenticate([new UsernamePasswordAuthenticator(lookupByUsernamePassword)],
sessionHandler: new JwtSessionHandler('my app', 'shhh secret', usernameLookup), allowHttp: true);
_apiServer.addApi(new Api());
// Create a Shelf handler for your RPC API.
var apiHandler = shelf_rpc.createRpcHandler(_apiServer);
var apiRouter = shelf_route.router()
..add('/api', null, apiHandler, exactMatch: false);
var handler = const shelf.Pipeline()
.addMiddleware(loginMiddleware)
.addMiddleware(shelf.logRequests())
.addHandler(apiRouter.handler);
var server = await shelf_io.serve(handler, '0.0.0.0', 8087);
}
/// Stub implementation
lookupByUsernamePassword(String username, String password) async =>
new Some(new Principal(username));
/// Stub implementation
usernameLookup(String username) async =>
new Some(new Principal(username));
कैसे मैं केवल अनुरोध करता है कि (उदाहरण के लिए) /account
साथ शुरू करने के लिए loginMiddleware
जोड़ सकते हैं? या इससे भी बेहतर: क्या आरपीसी संसाधन पर loginMiddleware
को परिभाषित करना संभव है (पथ उपसर्ग को परिभाषित करने के बजाय जो संभावित रूप से बदल सकता है और प्रमाणीकरण रद्द कर सकता है)?
अच्छा सवाल। मैंने कभी भी आरपीसी पैकेज का उपयोग नहीं किया है, लेकिन चूंकि यह मूल शेल्फ पैकेज नहीं है (केवल शेल्फ_आरपीसी के माध्यम से अनुकूलित किया गया है) मैं नहीं देखता कि आप अपने आरपीसी संसाधनों के भीतर कहीं भी किसी भी शेल्फ मिडलवेयर (जैसे प्रमाणीकरण) का उपयोग कैसे कर सकते हैं। – Anders