Strapi 登录后如何更改密码?

Strapi 登录后如何更改密码?,strapi,Strapi,我使用了下面的代码来更改密码,但是我得到了“请求失败,状态代码为400”。有人能告诉我问题出在哪里吗 axios.post ('http: // localhost: 1337 / auth / reset-password', {        code: '',        password: '1234567',        passwordConfirmation: '1234567',      }      , {        headers: {            Aut

我使用了下面的代码来更改密码,但是我得到了“请求失败,状态代码为400”。有人能告诉我问题出在哪里吗

axios.post ('http: // localhost: 1337 / auth / reset-password', {
       code: '',
       password: '1234567',
       passwordConfirmation: '1234567',
     }
     , {
       headers: {
           Authorization: `Bearer $ {this.currentUser.jwt}`
       }
     }
     ) .then (response => {
       // Handle success.
       console.log ('Your user \' s password has been changed. ');
     })
     .catch (error => {
       // Handle error.
       console.log ('An error occurred:', error);
     });
   }

提前感谢

您必须使用
PUT/users/:id
路由(从用户API)

如果希望用户使用此路由,则必须创建一个ISOOwner策略并将其应用于此路由。 只允许当前用户使用自己的密码,而不是所有用户的密码

以下是一些文档:


您必须使用
PUT/users/:id
路由(从用户API)

如果希望用户使用此路由,则必须创建一个ISOOwner策略并将其应用于此路由。 只允许当前用户使用自己的密码,而不是所有用户的密码

以下是一些文档:


另一种替代方法是使用密码重置控制器。该场景是通过
POST
将密码对象发送到
http://localhost:1337/password
,控制器将验证当前的
密码
,然后使用给定的
新密码
更新密码,并返回新的
jwt令牌

我们将发布一个密码对象,如下所示:

{
“标识符”:“yohanes”,
“密码”:“123456789”,
“新密码”:“123456”,
“确认密码”:“123456”
}
这些步骤是:

  • 创建密码重置路由
    /api/password/config/routes.json
  • {
    “路线”:[
    {
    “方法”:“发布”,
    “路径”:“/密码”,
    “处理程序”:“密码.索引”
    }
    ]
    }
    
  • /api/password/controllers/password.js创建密码重置控制器
  • module.exports={
    索引:异步ctx=>{
    返回“你好,世界!”;
    }
    }
    
    注意:不要忘记在
    角色->权限->应用程序
    中启用
    密码索引

  • 将邮递员指向
    http://localhost:1337/password
    。响应将显示文本
    Hello World

  • 更新密码控制器:

  • module.exports={
    索引:异步ctx=>{
    //发布参数
    //const params=JSON.parse(ctx.request.body);//如果使用Postman发布原始对象
    const params=ctx.request.body;
    //标识符是必需的。
    如果(!参数标识符){
    返回ctx.badRequest(
    无效的
    格式错误({
    id:'Auth.form.error.email.provide',
    信息:“请提供您的用户名或电子邮件。”,
    })
    );
    }
    //其他参数验证
    .
    .
    .
    //基于标识符获取用户
    const user=wait strapi.query('user','users permissions').findOne({username:params.identifier});
    //根据用户查询结果密码验证给定密码
    const validPassword=wait strapi.plugins['users-permissions'].services.user.validatePassword(params.password,user.password);
    如果(!validPassword){
    返回ctx.badRequest(
    无效的
    格式错误({
    id:'Auth.form.error.invalid',
    消息:“标识符或密码无效。”,
    })
    );
    }否则{
    //生成新的哈希密码
    const password=wait strapi.plugins['users-permissions'].services.user.hashPassword({password:params.newPassword});
    //更新用户密码
    等待斯特拉皮
    .query('用户','用户权限')
    .update({id:user.id},{resetPasswordToken:null,password});
    //返回新的jwt令牌
    发送({
    jwt:strapi.plugins['users-permissions'].services.jwt.issue({id:user.id}),
    user:sanitizeEntity(user.toJSON?user.toJSON():user,{model:strapi.query('user','users permissions').model}),
    }); 
    }
    }
    }
    
  • 发布password对象后,控制器将更新用户密码并返回新创建的jwt令牌

  • 完整的代码可以找到。在Strapi v.3.3.2上测试另一种替代方法是使用密码重置控制器。该场景是通过
    POST
    将密码对象发送到
    http://localhost:1337/password
    ,控制器将验证当前的
    密码
    ,然后使用给定的
    新密码
    更新密码,并返回新的
    jwt令牌

    我们将发布一个密码对象,如下所示:

    {
    “标识符”:“yohanes”,
    “密码”:“123456789”,
    “新密码”:“123456”,
    “确认密码”:“123456”
    }
    
    这些步骤是:

  • 创建密码重置路由
    /api/password/config/routes.json
  • {
    “路线”:[
    {
    “方法”:“发布”,
    “路径”:“/密码”,
    “处理程序”:“密码.索引”
    }
    ]
    }
    
  • /api/password/controllers/password.js创建密码重置控制器
  • module.exports={
    索引:异步ctx=>{
    返回“你好,世界!”;
    }
    }
    
    注意:不要忘记在
    角色->权限->应用程序
    中启用
    密码索引

  • 将邮递员指向
    http://localhost:1337/password
    。响应将显示文本
    Hello World

  • 更新密码控制器:

  • module.exports={
    索引:异步ctx=>{
    //发布参数
    //const params=JSON.parse(ctx.request.body);//如果使用Postman发布原始对象
    const params=ctx.request.body;
    //标识符是必需的。
    如果(!参数标识符){
    返回ctx.badRequest(
    无效的
    格式错误({
    id:'Auth.form.error.email.provide',