authentication - Dart 登录/注销示例

标签 authentication dart dart-html

我试图找到一个使用 Dart 进行用户身份验证的简单示例。到目前为止,我发现的最接近的是 https://github.com/dart-lang/bleeding_edge/blob/master/dart/tests/standalone/io/http_auth_test.dart .任何人都可以指导或向我提供使用 Dart 的服务器端身份验证的工作示例。提前致谢。

最佳答案

身份验证是一个庞大的主题,您没有具体说明要实现的目标,但让我指导您为 Dart 应用程序构建 Facebook 身份验证,因为我认为这是最简单的开始。为什么?因为我们不需要谈论您可能正在使用的每个可能的数据库,或者您如何设置数据库结构、模型等以及您如何处理安全性(生成 token 等)。

有了这些知识,您就可以实现其他服务身份验证(Google+、Twitter),如果您愿意,最终还可以实现您自己的身份验证。

因此,首先,在 Facebook apps page 上注册一个应用程序按创建新应用程序。你应该得到这个页面:

enter image description here

(一定要同时填写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 中指定的 URL ( /login/facebook ),然后我们的应用程序需要响应它。我让你随心所欲地处理路由,但本质上是服务器在收到 /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 请求之后,您就拥有了用户信息。现在你可以做一些事情,比如在 session 中存储经过身份验证的用户。您可以使用例如 HttpRequest.session 以此目的。要注销,只需从 session 中删除数据。

这大致是您启动 Facebook 身份验证工作所需执行的程序。对于许多其他网站,您可以期待类似的工作流程。您可能还需要/使用 OAuth2 包裹。

所以总结一下:
  • 使用正确的 URL 创建 Facebook 开发人员配置文件和应用程序。
  • 在某些配置中记下应用程序 ID 等。
  • 创建正确的登录链接。
  • 将服务器端代码写入 Facebook 登录将用户抛出的位置。
  • 在服务器中编写一些 API 调用来检索经过身份验证的用户。

  • 玩得开心!

    关于authentication - Dart 登录/注销示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15498107/

    相关文章:

    jquery - 在 Dart 2 中为 HTML 元素创建类似 jQuery 的动画

    c# - 在 Windows 平台上创建进入网站安全区域的应用程序

    java - 为什么从多个选项卡注销后会生成不同的 session ID?

    symfony - 服务中的 Simfony2 服务尝试调用方法 "get"

    flutter - 骰子卷动画 flutter

    dart - 如何防止 RenderBox 覆盖其他小部件?

    dart - 用 Dart 制作矩阵

    authentication - 如何进行基本的 http 身份验证(登录和注册)并存储 token

    dart-pub - 飞镖网 : couldn't run webdev

    c# - 为 RoleManager 和 UserManager 创建实例以进行单元测试?