我在這裏撞着我的頭撞牆。請幫忙。 我開發了一個MVC 4.0 web應用程序。 我正在使用Facebook SDK登錄到網站。 爲了討論起見,我有兩個操作方法:索引和信息。 索引是用戶點擊「使用Facebook登錄」按鈕的地方,並且在他輸入他的憑證後,他應該被重定向到信息操作方法。 (從那裏他可以註銷)。 這是該指數方法:如何拒絕匿名用戶直接調用操作方法?
[AllowAnonymous]
public ActionResult Index()
{
return View();
}
我在web.config中有這樣的:
<authentication mode="Forms">
<forms loginUrl="~/Home/Index" timeout="2880" />
</authentication>
這些都是我在Facebook的開發者進入我的應用程序的設置:
帆布網址:
http://localhost/[AppName]/
安全帆布網址:
https://localhost/[AppName]/
網站網址:
http://localhost/[AppName]/
有效的OAuth重定向的URI:
http://localhost/
也
http://localhost/[AppName]/home/index
的問題是:
我想要做的只提供給授權用戶信息的操作方法,所以很自然,我飾它與[授權]屬性:
[Authorize]
public ActionResult Info()
{
var client = new FacebookClient();
var oauthResult = client.ParseOAuthCallbackUrl(Request.Url);
// Build the Return URI form the Request Url
var redirectUri = new UriBuilder(Request.Url);
redirectUri.Path = Url.Action("Info", "Home");
// Exchange the code for an access token
dynamic result = client.Get("/oauth/access_token",
new { client_id = AppId,
redirect_uri = redirectUri.Uri.AbsoluteUri,
client_secret = SecId,
code = oauthResult.Code });
// Read the auth values
string accessToken = result.access_token;
Session["access_token"] = accessToken;
DateTime expires = DateTime.UtcNow.AddSeconds(Convert.ToDouble(result.expires));
// Get the user's profile information
dynamic me = client.Get("/me",
new
{
fields = "first_name,last_name,email,picture",
access_token = accessToken
});
var userInfo = new InfoModel()
{
firstName = me.first_name,
lastName = me.last_name,
emailId = me.email,
picture = me.picture,
accessToken = result.access_token
};
return View("Info", userInfo);
}
所以現在我有兩個unwated scenraios:我可以登錄到我的應用程序,但在登錄後,我被重定向到Home/Index,而不是Home/Info。
OR
我可以正常登錄(我重定向到首頁/信息登錄後,如預期),但我也可以直接瀏覽到信息的操作方法(因爲我不得不刪除[授權]屬性在
才能登錄。這就像一個魔方!
對不起後是漫長的,但我有詳細說明。