的authenticate_user!为ics流设计

时间:2014-11-21 22:39:38

标签: ios ruby-on-rails devise icalendar

我已经设置了一些活动,用户可以通过Outlook / Thunderbird / Iphone等订阅日历活动。

我使用devise进行身份验证,几乎所有控制器都设置了这个设计方法:

 before_filter :authenticate_user!

Icalendar Feed的网址是:

/events/export_events.ics

当我删除 before_filter:authenticate_user!行时,基本上您不需要进行身份验证,然后就可以订阅事件。

我在Phone / Thunderbird和Outlook上获得了它。

当我取消注释这一行时,我的Iphone出现了错误:

Calendar Subscription
Unable to very account information.

当我输入凭据时,我被拒绝了。 似乎我必须添加一些东西来设计,以便用户可以通过Url进行身份验证。

Rails日志说:

Processing by EventsController#export_events as ICS
Completed 401 Unauthorized in 1ms

我有什么想法可以验证这个吗?

不重要的旁注,但为了完整起见。 我使用Icalendar gem创建/转换我的数据库事件为有效的Icalendar格式。

在我的events_controller.rb中:

有一个像魅力一样的export_events动作: 它完全取决于身份验证,但有人可能会使用此代码段来了解问题或自己的项目。

def export_events
    @events = Event.first(10)
    @calendar = Icalendar::Calendar.new
    @events.each do |e| 
      event = Icalendar::Event.new
      event.dtstart = e.start.strftime("%Y%m%dT%H%M%S")
      event.dtend = e.end.strftime("%Y%m%dT%H%M%S")
      event.summary = e.title
      @calendar.add_event(event)
    end 
    @calendar.publish
    #headers['Content-Type'] = "text/calendar; charset=UTF-8"
    #render :text => @calendar.to_ical
    @stuff = @calendar.to_ical
    respond_to do |w|
      w.ics { render text: @stuff }
      w.html{}
    end
  end

routes.rb中:

resources :events do
  collection do
    get 'export_events'
  end
end

1 个答案:

答案 0 :(得分:0)

我设法验证了。 我打开了devise.rb文件。 我必须取消注释这一行:

config.http_authenticatable = true