【发布时间】:2015-07-18 09:36:59
【问题描述】:
通常,dart 文档有很多关于几乎所有主题的有用示例。不幸的是,我在 dart 的会话中找不到任何内容。
任何人都可以验证这种方法是否是进行会话的正确方法:
- 浏览器向服务器发送 GET 请求。
- 服务器以网络客户端响应。
- Web 客户端发送用户凭据。
- a) 服务器检查凭据并生成会话 cookie。 b) 服务器将会话 cookie 发送回客户端。
- Web 客户端存储 cookie 以供进一步使用。
- Web 客户端发送对某些用户特定数据的请求,并附加 cookie 进行验证。
我特别感兴趣的是第 4 点、第 5 点和第 6 点,因为其他点都有据可查。如果你能在这点上分享一些代码sn-ps,我将非常感激。
编辑: 在阅读了下面 Günter Zöchbauer 的评论后,我查看了shelf_auth。我意识到它需要重写服务器应用程序才能使用货架。 所以我就这么做了。
main.dart:
// imports of all necessary libraries
main() {
runServer();
}
/**
* Code to handle Http Requests
*/
runServer() {
var staticHandler = createStaticHandler(r"C:\Users\Lukasz\dart\auctionProject\web", defaultDocument: 'auctionproject.html');
var handler = new Cascade()
.add(staticHandler) // serves web-client
.add(routes.handler) // serves content requested by web-client
.handler;
io.serve(handler, InternetAddress.LOOPBACK_IP_V4, 8080).then((server) {
print('Listening on port 8080');
}).catchError((error) => print(error));
}
路线.dart
import 'handlers.dart' as handler;
import 'package:shelf_route/shelf_route.dart';
import 'package:shelf_auth/shelf_auth.dart' as sAuth;
Router routes = new Router()
..get('/anonymous', handler.handleAnonymousRequest);
//..post('/login', handler.handleLoginRequest); << this needs to be implemented
//other routs will come later
handlers.dart
import 'dart:async';
import 'dart:convert';
import 'dart:io' show HttpHeaders;
import 'databaseUtility.dart';
import 'package:shelf_exception_response/exception.dart';
import 'package:shelf/shelf.dart' as shelf;
import 'package:shelf_path/shelf_path.dart';
shelf.Response handleAnonymousRequest(shelf.Request request) {
return new shelf.Response.ok('got anonymous get request');
}
不幸的是,在阅读了shelf_auth 文档后,我仍然不太清楚在哪里添加身份验证。他们对处理程序使用 Pipline 语法。
【问题讨论】:
-
为此我使用pub.dartlang.org/packages/shelf_auth的会话处理程序。
-
@GünterZöchbauer 请你看看上面的代码。
-
我今天没时间,也许明天……
-
听起来对我来说是正确的。关键部分是您如何创建会话 cookie,以便无法猜测/预测它们以及您如何发送 cookie (resources.infosecinstitute.com/…)。不过,我对安全性知之甚少。
-
看看这个问题,它会解释你正在寻找的安全部分,我必须在 Java 后端 + Dart 前端解决同样的问题:security.stackexchange.com/questions/84860/…