2011-11-01 114 views
2

我正在尝试为我的应用程序的用户创建一个链接来订阅他们的帐户日历。我有一个链接,我生成的rails calendar_publisher_lists_url(:format =>:iics,:only_path => false,:protocol =>“web cal”) 它生成一个像webcal://mywebsite.com/calendar .ics 但是,这只适用于用户登录。当日历自动更新时,即使用户未登录,我也需要链接才能工作。因此,我需要生成一个如下所示的链接: webcal://[email protected]/calendar.ics其中'123'是用户的身份验证令牌。 如何生成此网址?使用用户认证令牌Rails webcal subcription url;

回答

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

这很棒..谢谢! – Dave

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 

然后饲料链接将是

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