共享网址后允许访问

时间:2014-01-02 17:24:48

标签: asp.net-mvc facebook twitter

在MVC 5网站上,我希望访客只有在Facebook或Twitter上分享后才能阅读完整版的帖子。

我在一些网站上看过这个例子......最好的方法是什么?

这里没有真正的安全问题......这只是宣传这个词的一种方式......

我的第一个想法是使用帖子KEY(Guid)保存一个cookie ...用户看不到这个键,所以他不会知道这个值。

问题是我如何知道他分享了网址...如何获得确认?

谢谢,

米格尔

2 个答案:

答案 0 :(得分:0)

根据Facebook Developers Docs

,您可获得以下确认
FB.ui(
{
    method: 'feed',
    name: 'Facebook Dialogs',
    link: 'https://developers.facebook.com/docs/dialogs/',
    picture: 'http://fbrell.com/f8.jpg',
    caption: 'Reference Documentation',
    description: 'Dialogs provide a simple, consistent interface for applications to interface with users.'
},
function(response) {
    if (response && response.post_id) {
      alert('Post was shared.'); //give access to article
    } else {
      alert('Post was not shared.'); //they chose not share... don't give access
    }
});

我在.NET项目中几乎逐字地实现了这个代码(只用我自己的功能替换了alerts)如果他们共享了竞赛页面,我给了用户两个参赛作品(如果他们分享了一个参赛作品,那么没有分享或什么也没做。)

至于Twitter,我个人没有实现类似的东西,但你最好的选择可能是JavaScript Interfaces for Twitter for Websites

答案 1 :(得分:0)

我不知道Facebook,但推特转发与分享相同。状态/转推/ ids应该有效。如果您有推文的ID,那么您可以列出转发该推文的人员列表,根据需要进行更新以获取新ID。

https://dev.twitter.com/docs/api/1.1/get/statuses/retweeters/ids

如果您不想编写所有代码以进行身份​​验证和配置端点,则可以使用第三方库。以下是我的图书馆LINQ to Twitter v3.0 Beta的一个例子:

        ulong tweetID = 210591841312190464;

        var status =
            await
            (from tweet in twitterCtx.Status
             where tweet.Type == StatusType.Retweeters &&
                   tweet.ID == tweetID
             select tweet)
            .SingleOrDefaultAsync();

        if (status != null && status.User != null)
            status.Users.ForEach(
                userID => Console.WriteLine("User ID: " + userID));
顺便说一下,还有Facebook SDK for .NET