我的项目目前用于has_secure_password
处理用户(类似于这个railscast)。一切正常,但展望未来,我觉得切换到 Auth0 会带来好处,并希望在太多用户注册之前立即进行转换。
用户被保存到具有多个关联(签入/评论/等)的用户模型中。如何将 Auth0 用户链接到我的数据库中的用户记录。我想我可以在他们登录后通过电子邮件查找(因为它们将是唯一的)或 Auth0 用户 ID(并向用户表中添加一个新列)。似乎我可以简单地使用 Auth0 登录回调来登录用户(使用我当前的会话控制器),但是当在 OmniAuth 中创建用户时,如何在我的数据库上创建用户。是否也有回调?
在一个完美的世界中,我想做这样的事情:
我想要的可能吗?或者我应该坚持我当前的身份验证?
authentication data-migration ruby-on-rails ruby-on-rails-5 auth0
我正在尝试配置 auth0 API。最后我做到了,昨天它起作用了。今天不是 - 但我没有改变任何代码 - 我在 WebStorm 中有文件历史记录。
看起来问题出在
构造函数(公共路由器:路由器)
这是我的配置:
@angular/cli: 1.0.0
node: 7.7.3
os: win32 x64
@angular/common: 2.4.10
@angular/compiler: 2.4.10
@angular/core: 2.4.10
@angular/forms: 2.4.10
@angular/http: 2.4.10
@angular/platform-browser: 2.4.10
@angular/platform-browser-dynamic: 2.4.10
@angular/router: 3.4.10
@angular/cli: 1.0.0
@angular/compiler-cli: 2.4.10
Run Code Online (Sandbox Code Playgroud)
auth.service.ts
import { Injectable } from '@angular/core';
import { tokenNotExpired } from 'angular2-jwt';
import { myConfig } from './auth.config';
// Avoid name not found warnings
declare var Auth0Lock: any;
@Injectable()
export class Auth {
// Configure Auth0
lock = new Auth0Lock(myConfig.clientID, …
Run Code Online (Sandbox Code Playgroud) 我正在使用Auth0的API来处理用户管理.一切都按预期工作 - Login()
正确存储本地.在Logout()
它上面正确删除它们.
但是,实际Login
按钮不会Logout
自动成功 - 这是我硬刷页面时,而不是直接刷新页面.我相信这是我绑定的问题?
标题组件
authenticated: boolean; // Wasn't sure how else to filter in front-end
constructor(private authService: AuthService) { }
ngOnInit() {
this.authenticated = this.authService.isAuthenticated()
}
login() {
this.authService.login();
}
logout() {
this.authService.logout();
}
}
Run Code Online (Sandbox Code Playgroud)
用于标题的HTML
<li class="nav-item">
<a class="nav-link waves-light" *ngIf="!authenticated" mdbRippleRadius (click)="login()"><i class="fa fa-user"></i> <span class="clearfix d-none d-sm-inline-block">Log In</span></a>
<a class="nav-link waves-light" *ngIf="authenticated" mdbRippleRadius (click)="logout()"><i class="fa fa-user"></i> <span class="clearfix d-none d-sm-inline-block">Log Out</span></a>
</li>
Run Code Online (Sandbox Code Playgroud)
文档说使用auth.isAuthenticated()
哪个将从服务调用该函数
public isAuthenticated(): …
Run Code Online (Sandbox Code Playgroud) 如何在AWS Lambda 中维护会话状态?例如,如果我需要查询DynamoDb以获取登录用户的订阅信息,如果用户使用的是AngularJS Web 应用程序,我该如何从 Lambda 函数执行此操作?
我让用户使用Auth0登录,并有一个在 AWS 上验证用户的自定义授权方。但后来我想使用登录用户CognitoID
来查询 DynamoDB。
根据 Lambda (node.js) ( https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-context.html ) 的AWS 文档,您只有有关 Amazon Cognito 身份的信息通过 AWS 移动开发工具包调用时提供程序。
identity.cognitoIdentityId
identity.cognitoIdentityPoolId
Run Code Online (Sandbox Code Playgroud)
但是如果我使用一个使用 AngularJS 和 Auth0 的网络应用程序呢?
好吧,也许在 DynamoDB 中存储用户信息的最简单的解决方案就是在客户端提取JWT,在 AngularJS 中,然后将提取的 Auth0(user_id
例如)facebook|12345
在 API 请求中发送到 Lambda,Lambda 查询用户是否DynamoDB 中存在,如果不存在则创建新记录。
然后,在对必须查询用户信息的 API 的每个请求中,我发送user_id
并在 Lambda 中使用该 ID 查询数据库。这应该是安全的,因为我在自定义授权方验证用户令牌并在请求到达 Lambda 之前拒绝或允许请求。
尝试使用离子设置 auth0 时遇到问题。
但是,我认为它与它无关,它更像是一个加密 js / 配置问题。
这是我得到的错误:
main.7c4444f936ddaf5620f8.bundle.js:formatted:15919 ERROR Error:
Uncaught (in promise): TypeError: r.randomBytes is not a function
TypeError: r.randomBytes is not a function at n.generateProofKey (main.7c4444f936ddaf5620f8.bundle.js:formatted:844)
下面是我的加密 js 文件:
import * as crypto from 'crypto-js';
function base64UrlSafeEncode(string) {
return string.toString('base64')
.replace(/+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
}
function sha256(buffer) {
return crypto.createHash('sha256').update(buffer).digest();
}
exports.generateProofKey = function generateProofKey() {
var codeVerifier = base64UrlSafeEncode(crypto.randomBytes(32));
var codeChallenge = base64UrlSafeEncode(sha256(codeVerifier));
return { codeVerifier: codeVerifier, codeChallenge: codeChallenge };
};
exports.generateState = function …
Run Code Online (Sandbox Code Playgroud) auth0 ×5
angular ×3
aws-lambda ×1
cryptojs ×1
javascript ×1
lambda ×1
rxjs ×1
typescript ×1
webpack ×1