因为采用的是aws的云服务,包括用户中心也是采用的aws的cognito用户池,cognito对于用户的处理目前表现的性能还是很强的;aws 提供了有IOS和Android端的sdk,可以通过sdk实现用户的注册,
本文主要是通过js层对cognito的操作;
const AWS = require('aws-sdk');
AWS.config.update({region: 'us-east-1'});
const amplify = require('aws-amplify');
const region = 'us-east-1';
const userPoolId = 'us-east-1_**'; // 用户池id
const clientId = '*************'; // clientID
amplify.default.configure({
Auth: {
// REQUIRED - Amazon Cognito Region
region: region,
// OPTIONAL - Amazon Cognito Federated Identity Pool Region
// Required only if it's different from Amazon Cognito Region
identityPoolRegion: region,
// OPTIONAL - Amazon Cognito User Pool ID
userPoolId: userPoolId,
// OPTIONAL - Amazon Cognito Web Client ID (26-char alphanumeric string)
userPoolWebClientId: clientId,
}
});
const Auth = amplify.default.Auth;
特别需要注意的是:amplify这个插件是不支持用户池 clientSecret的,所以要选择没有sercret的client
用户创建方式由两种,一种为邮箱创建,另一种为电话号码创建;
如果在attribute中指定email,则验证码会发给邮箱,指定attribute为phone_number,则会发给手机号,手机号格式为+13234804254,+1为美国区号;
/**
* 注册用户
*/
// signUp('***@qq.com', '123456');
async function signUp(username, password) {
try {
const user = await Auth.signUp({
username,
password,
attributes: {
email: username
}
});
console.log({user});
} catch (error) {
console.log('error signing up:', error);
}
}
/**
* 用户通过验证码启用用户
*/
async function confirmSignUp(username, code) {
try {
let user = await Auth.confirmSignUp(username, code);
console.log(user);
} catch (error) {
console.log('error confirming sign up', error);
}
}
/**
* 重新发送验证码
*/
async function resendConfirmationCode(username) {
try {
let user = await Auth.resendSignUp(username);
console.log('code resent successfully');
} catch (err) {
console.log('error resending code: ', err);
}
}
/**
* 忘记密码重新发送验证码
*/
async function forgotPassword(username) {
try {
let data = await Auth.forgotPassword(username);
console.log(data);
} catch (err) {
console.log("forgot password err:", err);
}
}
/**
* 重置密码
*/
async function forgotPasswordReset(username, code, newPassword) {
try {
let data = await Auth.forgotPasswordSubmit(username, code, newPassword);
console.log("success reset password");
} catch (err) {
console.log("reset password err:", err);
}
}
/**
* 用户登录
*/
async function signIn(username, password) {
try {
let user = await Auth.signIn(username, password);
console.log(user.attributes);
let sub_id = user.attributes.sub;
console.log("--------------");
console.log("用户的sub:");
console.log(sub_id);
console.log("--------------");
console.log("idToken:");
console.log(user.signInUserSession.idToken.jwtToken);
console.log("--------------");
console.log("refreshToken:");
console.log(user.signInUserSession.refreshToken.token);
console.log("--------------");
console.log("accessToken:");
console.log(user.signInUserSession.accessToken.jwtToken);
} catch (err) {
console.error(err);
}
}
/**
* 更新用户自定义属性
*/
async function updateUserAttributes(user) {
try {
await Auth.updateUserAttributes(user, {
"custom:locale": "cn;zh-Hans-US"
})
} catch (err) {
console.log("update user err:", err);
}
}