镖登录/注销示例(Dart login/logout example)

2019-08-17 17:41发布

我试图找到飞镖用户身份验证的一个简单的例子。 到目前为止,我已经找到了最接近的是https://github.com/dart-lang/bleeding_edge/blob/master/dart/tests/standalone/io/http_auth_test.dart 。 任何人都可以直接或提供给我使用飞镖服务器端认证的工作示例。 提前致谢。

Answer 1:

认证是一个很大的课题,你没有太大指定要达到什么样的,但让我引导你建立一个Facebook的身份验证你飞镖应用程序,因为我认为这是开始用最简单的一个。 为什么? 因为我们不需要谈论你可能会利用一切可能的数据库,或者你如何设置你的数据库结构,模型等,你如何处理与安全(令牌生成等)。

有了这些知识,你就可以实现其他服务认证(Google +和Twitter),并最终你自己,如果你愿意的话。

因此,首先,注册一个应用程序的Facebook应用程序页面按制作新的应用 。 你应该得到这个页面:

(请务必填写这两个应用程序域和网站网址)

然后某处指定一些配置文件(如config.dart ),您将导入无处不在,你需要:

var config = {
  'authentication': {
    'facebook': {
      'appId': '...',
      'appSecret': '...',
      'url': 'http://test.com/login/facebook'
    }
  },
};

然后,你需要的地方创建一个链接。 如果您正在使用的Web UI,你的飞镖脚本可以先导入配置文件以及创建一个登录网址:

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登录对话框将引发用户与我们在配置中指定的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第一。

在此之后,一些代码,做API请求给Facebook:

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这里包和查询字符串包。

该API的请求后,您手边的用户信息。 现在你可以做这样的事情在会话中存储的身份验证的用户。 您可以使用如HttpRequest.session用于此目的。 要注销,只需从会话删除数据。

这大约是你需要做的起床Facebook验证工作的过程。 你可以期待许多其他网站类似的工作流程。 您可能还需要/使用OAuth2包。

因此,要总结:

  • 创建Facebook的开发人员配置,使用适当的网址的应用程序。
  • 写下应用程序ID和这样的一些配置。
  • 创建正确的登录链接。
  • 编写服务器端代码到Facebook登录抛出的用户。
  • 写在服务器上的某些API调用来检索身份验证的用户。

玩得开心!



文章来源: Dart login/logout example