我试图找到一个使用 Dart 进行用户身份验证的简单示例。到目前为止,我发现的最接近的是https://github.com/dart-lang/bleeding_edge/blob/master/dart/tests/standalone/io/http_auth_test.dart。任何人都可以指导或向我提供使用 Dart 的服务器端身份验证的工作示例。提前致谢。
1 回答
身份验证是一个庞大的主题,您并没有具体说明要实现的目标,但让我指导您为您的 Dart 应用程序构建 Facebook 身份验证,因为我认为这是最简单的开始。为什么?因为我们不需要讨论您可能正在使用的每个可能的数据库,或者您如何设置数据库结构、模型等以及如何处理安全性(生成令牌等)。
有了这些知识,您就可以实现其他服务身份验证(Google+、Twitter),如果您愿意,最终还可以实现自己的身份验证。
因此,首先,通过按Create New App在Facebook 应用程序页面上注册一个应用程序。你应该得到这个页面:
(一定要填写App domain和site URL)
然后在某处(例如config.dart
)指定一些配置文件,您将在需要的任何地方导入:
var config = {
'authentication': {
'facebook': {
'appId': '...',
'appSecret': '...',
'url': 'http://test.com/login/facebook'
}
},
};
然后你需要在某处创建一个链接。如果你使用的是 Web UI,你的 Dart 脚本可以首先导入配置并创建一个登录 URL:
import 'config.dart';
main() {
var fbConfig = config['authentication']['facebook'];
var appId = fbConfig['appId'];
var url = fbConfig['url'];
var loginLinkUrl = 'https://www.facebook.com/dialog/oauth/?client_id=$appId&redirect_uri=$url&state=TEST_TOKEN&scope=email';
}
现在在您的 HTML 上指定链接:
<a href="{{ loginLinkUrl }}">Login with Facebook</a>
此时,或许可以阅读 Facebook 开发者指南:https ://developers.facebook.com/docs/reference/dialogs/oauth/
Facebook 登录对话框会将用户带到我们在 config ( /login/facebook
) 中指定的 URL,然后我们的应用程序需要响应它。我让你随心所欲地处理路由,但本质上是服务器在收到/login/facebook
请求时,首先对一些属性进行编码:
var code = uri.encodeUriComponent(request.queryParameters['code']);
var appId = uri.encodeUriComponent(config['authentication']['facebook']['appId']);
var appSecret = uri.encodeUriComponent(config['authentication']['facebook']['appSecret']);
var url = uri.encodeUriComponent(config['authentication']['facebook']['url']);
你需要import 'dart:uri' as uri
先。
在此之后,一些向 Facebook 发出 API 请求的代码:
http.read('https://graph.facebook.com/oauth/access_token?client_id=$appId&redirect_uri=$url&client_secret=$appSecret&code=$code').then((contents) {
// "contents" looks like: access_token=USER_ACCESS_TOKEN&expires=NUMBER_OF_SECONDS_UNTIL_TOKEN_EXPIRES
var parameters = QueryString.parse('?$contents');
var accessToken = parameters['access_token'];
// Try to gather user info.
http.read('https://graph.facebook.com/me?access_token=$accessToken').then((contents) {
var user = JSON.parse(contents);
print(user); // Logged in as this user.
});
});
我在这里使用HTTP包和QueryString包。
在 API 请求之后,您手头就有用户信息。现在您可以执行诸如将经过身份验证的用户存储在会话中的操作。HttpRequest.session
您可以为此目的使用例如。要注销,只需从会话中删除数据。
这大致是您启动 Facebook 身份验证工作所需执行的过程。您可以期待许多其他网站的类似工作流程。您可能还需要/使用该OAuth2
软件包。
所以总结一下:
- 创建 Facebook 开发人员资料和具有正确 URL 的应用程序。
- 在一些配置中写下应用程序 ID 等。
- 创建正确的登录链接。
- 将服务器端代码写入 Facebook 登录引发用户的位置。
- 在服务器中编写一些 API 调用以检索经过身份验证的用户。
玩得开心!