EmberJS - Ember Simple Auth Oath2'grant _type'未定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EmberJS - Ember Simple Auth Oath2'grant _type'未定义相关的知识,希望对你有一定的参考价值。

我一直在关注Ember Simple Auth演练here。我按照指示添加了各种代码片段,但是当我提交登录表单时,我收到了'grant_type'未定义的错误。

这是当前的设置:

// Login Form
        <form {{action 'authenticate' on='submit'}}>
          <label for="identification">Login</label> {{input value=identification placeholder='Enter Login' class='form-control'}}
          <br>
          <label for="password">Password</label> {{input value=password placeholder='Enter Password' class='form-control' type='password'}}
          <br>
          <button type="submit" class="btn btn-default">Login</button>
        </form>

        {{#if errorMessage}}
          <p>
            <strong>Login failed: </strong>
            <code>{{errorMessage}}</code>
          </p>
        {{/if}}

//index.js controller

import Controller from '@ember/controller';

export default Controller.extend({
  session: Ember.inject.service('session'),

  actions: {
    invalidateSession() {
      this.get('session').invalidate();
    },
    authenticate() {
      let {identification, password } = this.getProperties('identification', 'password');
      this.get('session').authenticate('authenticator:oath2', identification, password).catch((reason) => {this.set('errorMessage', reason.error)
    })
    }
  }

});

//application route

import Route from '@ember/routing/route';
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';

export default Ember.Route.extend(ApplicationRouteMixin);
    // authenticators/oath.js

import OAuth2PasswordGrantAuthenticator from 'ember-simple-auth/authenticators/oauth2-password-grant';

export default OAuth2PasswordGrantAuthenticator.extend({
  serverTokenEndpoint: 'http://server:port/api/token',


});

//api endpoint

var tokenRouter = express.Router();

tokenRouter.post('/api/token', function(req, res) {


  if (req.body.grant_type === 'password') {
    if (req.body.username === 'letme' && req.body.password === 'in') {
      res.status(200).send('{"access_token": "secret token!"}');
    } else {
      res.status(400).send('{ "error": invalid_grant_type" }')
    }
    } else {
      res.status(400).send(' { "error": "unsupported_grant_type" }')
    }

})

app.use('/', tokenRouter)

请求已成功发送到我的端点,并生成500错误,并显示未定义grant_type的消息。查看请求,看起来不像用户名或密码。

据我所知,我的代码与文档和补充视频中的代码相同,但我显然遗漏了一些东西。

答案

我最终想到了这一点。

检查Chrome调试工具的“网络”标签中的“表单数据”后,很明显grant_type正在正确发送。

我的问题是缺少身体解析器中间件:

app.use(bodyParser.urlencoded({ extended: false }))

以上是关于EmberJS - Ember Simple Auth Oath2'grant _type'未定义的主要内容,如果未能解决你的问题,请参考以下文章

如何在 EmberJS / Ember Data 中使用单个路由的多个模型?

在 Emberjs / Ember-cli 中禁用/关闭 LiveReload 服务器

将 emberJS 应用程序更新为 ember-cli 和 data 3.28 后出现阻塞错误

如何构建 Ember.js 应用程序

EmberJS / Ember-data:尽管存在所有ID,但hasMany集合不完整

Ember JS用于SCORM合规性