使用用户身份验证令牌Rails webcal subcription url;

时间:2011-11-01 17:21:10

标签: ruby-on-rails icalendar

我正在尝试为我的应用用户创建一个链接,用于订阅他们的帐户日历。我有一个链接,我在rails中生成calendar_publisher_lists_url(:format =>:ics,:only_path => false,:protocol =>“web cal”) 它会生成像webcal://mywebsite.com/calendar.ics这样的链接 但是这只有在用户登录时才有效。我需要链接在日历自动更新时工作,即使用户没有登录。因此我需要生成一个如下所示的链接: webcal://123@mywebsite.com/calendar.ics其中'123'是用户的身份验证令牌。 如何生成此网址?

2 个答案:

答案 0 :(得分:1)

将其作为属性放在URL上有什么问题?

calendar_publisher_lists_url(:format => :ics, :only_path => false,:protocol => "webcal", :authentication_token => current_user.authentication_token)

webcal://mywebsite.com/calendar.ics?authentication_token=123

我的意思是除了安全问题......

答案 1 :(得分:0)

如果安全性不是问题,您可以更改路由以添加ID。

match '/calendar/:id/calendar_feed', to: 'calendar#calendar_feed', :as => 'calendar_feed_path'

然后在你的控制器中输入

def calendar_feed
  @user=User.find(params[:id])
  respond_to do |format|
    format.ics
  end
end

然后添加一个视图模板,根据您的逻辑调整以满足您的需求(此代码来自我的一个项目):

BEGIN:VCALENDAR
METHOD:PUBLISH
VERSION:2.0
PRODID:-//UserCalendar//EN
X-WR-CALNAME:Name Of Website
CALSCALE:GERGORIAN
<% @users.each do |user| %>  #change logic to fit your needs
    <% user.day_offs.each do |day_off| %>
BEGIN:VEVENT
DTSTAMP:<%=Time.now.strftime("%Y%m%dT%H%M%SZ")%>
UID:<%=day_off.id%>
SUMMARY:<%= day_off.user.name.titleize %> | <%= day_off.do_type %>
DTSTART:<%= day_off.start_date.strftime("%Y%m%d") %>
<% end_day=day_off.end_date + 1.day %>
DTEND:<%= end_day.strftime("%Y%m%d") %>
END:VEVENT
<% end %>
<% end %>
END:VCALENDAR

然后Feed链接

<%= link_to("Subscribe to Calendar", "webcal://www.nameofwebsite.com/calendar_feed/#{current_user.user_id}/calendar_feed.ics" ) %>