AWS amplify 实现cognito 注册和登录

一、AWS cognito

  因为采用的是aws的云服务,包括用户中心也是采用的aws的cognito用户池,cognito对于用户的处理目前表现的性能还是很强的;aws 提供了有IOS和Android端的sdk,可以通过sdk实现用户的注册,

本文主要是通过js层对cognito的操作;

二、amplify 用户池配置

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

三、signUp

用户创建方式由两种,一种为邮箱创建,另一种为电话号码创建;

如果在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);
    }
}

三、signIn

/**
 * 用户登录
 */
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);
    }
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值