【问题标题】:Ember Simple Auth (Devise) after update, authenticate_with_http_token alway emptyEmber Simple Auth (Devise) 更新后,authenticate_with_http_token 始终为空
【发布时间】:2015-11-03 17:35:15
【问题描述】:

我使用 ember-simple-authfor 进行了从 0.7.2 到 1.0.1 的更新以进行设计。参考资源:https://github.com/jimbeaudoin/ember-simple-auth-devise-example.
现在我的身份验证根本不起作用,因为 authenticate_with_http_token 总是空的,我找不到任何问题。你有想法吗 ?谢谢。

版本:

Ember: 2.1.0
Ember Simple Auth: 1.0.1
Rails: 4.2.4
Devise: 3.5.2
No Ember data

导轨:

class Api::SessionsController < Devise::SessionsController
  skip_before_action :authenticate_user_from_token!
  skip_before_action :verify_authenticity_token

  def create
    respond_to do |format|
      format.html { super }
      format.json do
        self.resource = warden.authenticate!(auth_options)
        sign_in(resource_name, resource)
        data = {
          token: self.resource.authentication_token,
          email: self.resource.email
        }
        render json: data, status: 201
      end
    end
  end
end


class Api::BaseController < ApplicationController
  respond_to :json
  before_action :authenticate_user_from_token!

  # Enter the normal Devise authentication path,
  # using the token authenticated user if available
  before_action :authenticate_user!

  private

  def authenticate_user_from_token!
    authenticate_with_http_token do |token, options|
      user_email = options[:email].presence
      user = user_email && User.unscoped.find_by_email(user_email)
      if user && Devise.secure_compare(user.authentication_token, token)
        sign_in user, store: false
      end      
    end  
  end

end

余烬:
登录控制器:

import Ember from 'ember';

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

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

灰烬模型:

import Ember from 'ember';
import PromiseArray from './promise-array';
import PromiseObject from './promise-object';

var Account = Ember.Object.extend({
  ...
})

Account.reopenClass({
  _find() {
    return $.get("/api/account.json").then(obj => {
      return this.create(obj.user);
    })
  },

  find() {
    return PromiseObject.create({promise: this._find()});
  }
})

export default Account;

登录后路由:

import Ember from 'ember';
import Account from '../models/account';
import AuthenticatedRouteMixin from 'simple-auth/mixins/authenticated-route-mixin';

export default Ember.Route.extend(AuthenticatedRouteMixin, {
  model: function() {
    return Account.find()
  }
})

【问题讨论】:

    标签: ruby-on-rails ember.js devise ember-simple-auth


    【解决方案1】:

    我认为对您来说失败的是在初始登录请求之后的请求授权?您是否在 Ember 应用中的任何位置授权传出请求?

    【讨论】:

    • authenticate_with_http_token 总是以 nil 结束并且循环总是被转义
    • 是的。当我登录成功时,我得到了令牌。但是另一个请求遇到了 401 问题。我更新了我的问题并设置了更多代码。我认为当我使用 ember-simple-authfor 而不使用 ember 数据时,我必须设置每个请求都必须获取令牌?
    • 自动授权已在 1.0 中移除。如果您没有在任何地方授权请求,则不会包含任何身份验证信息。看到这个线程:stackoverflow.com/questions/33483643/…
    猜你喜欢
    • 2015-02-09
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 2016-04-22
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多