我如何使用RESTful api的Auth0?

时间:2016-11-12 00:06:00

标签: mysql node.js rest express auth0

我正在考虑使用Auth0在我的nodejs API上注册我的用户。

我正在使用MySQL数据库对其进行签名,我也想使用Facebook以便注册和登录。

我遇到了回调概念的问题,因为我的API不应该通过浏览器访问。只有webapp或移动应用程序才能访问它。我如何在我的移动应用程序上实现我的登录/登录表单输入的处理以使用我应该使用Auth0的API?

感谢您的回答。

1 个答案:

答案 0 :(得分:0)

Auth0附带了免费帐户的数据库。当您将登录注册窗口小部件添加到您的应用程序并且用户注册时,它会将它们添加到您的auth0帐户中的数据库中。

您可以查看有关流程here

的信息

我所做的是使用auth0小部件对用户进行身份验证。这允许auth0处理加密和安全性。然后,当用户登录时,我在响应中请求配置文件。通常,这给了我至少基本信息,如电子邮件地址。我使用电子邮件地址创建自己的数据库作为唯一键,这使我能够在登录时向用户提供正确的数据。

以下是我使用窗口小部件的auth0服务示例,并在响应中请求用户的配置文件,然后将其存储到本地存储。

import { Injectable }                      from '@angular/core';
import { tokenNotExpired, JwtHelper }      from 'angular2-jwt';
import { Router }                          from '@angular/router';
import { myConfig }                        from './auth.config';

declare var Auth0Lock: any;

var options = {
    theme: {
    logo: '/img/logo.png',
    primaryColor: '#779476'
    },
    languageDictionary: {
    emailInputPlaceholder: "email@example.com",
    title: "Login or SignUp"
  }, 
 };

@Injectable()
export class Auth {
  lock = new Auth0Lock(myConfig.clientID, myConfig.domain, options, {});
  userProfile: Object;
  constructor(private router: Router) {
    this.userProfile = JSON.parse(localStorage.getItem('profile'));
    this.lock.on('authenticated', (authResult: any) => {
      localStorage.setItem('access_token', authResult.idToken);
      this.lock.getProfile(authResult.idToken, (error: any, profile: any) => {
        if (error) {
          console.log(error);
          return;
        }
        localStorage.setItem('profile', JSON.stringify(profile));
        this.userProfile = profile;
        this.router.navigateByUrl('/overview');
      });
      this.lock.hide();
    });
  }

  public login() {
    this.lock.show();
  }

  private get accessToken(): string {
        return localStorage.getItem('access_token');
    }

  public authenticated(): boolean {
    try {
        var jwtHelper: JwtHelper = new JwtHelper();
        var token = this.accessToken;
        if (jwtHelper.isTokenExpired(token))
            return false;
        return true;
    }
    catch (err) {
        return false;
    }
  }

  public logout() {
    localStorage.removeItem('profile');
    localStorage.removeItem('access_token');
    this.userProfile = undefined;
    this.router.navigateByUrl('/home');
  };
}