2014-02-05 4 views
0

Я пытаюсь настроить метод аутентификации в один раз. У меня есть начальная форма в моем Auth/Index, где пользователь вводит свое имя пользователя и пароль. Это создает UID и передает его на другой видHttpPost в MVC AuthController

@model Hsbc.Marketing_Awards.Website.Models.AuthModel 

<h2>EnterAuthenticationLink</h2> 

@using(Html.BeginForm("AuthorizeOneTimeLink", "Auth", FormMethod.Post)) 
{ 
    @Html.LabelFor(m => m.EmailAddress, "Enter one time link") 
    @Html.TextBoxFor(m => m.AuthenticationUrl, new { Name = "authenticationUrl" }) 
    <input type="submit" value="Submit"/> 
} 

Я хочу, чтобы представить эту форму, но сохранить перенаправляют на мой взгляд Auth/Index. Я предполагаю, что это связано с тем, что мне нужно авторизовать представление в моем web.config, но я попытался это сделать, и он, похоже, не работает.

<system.web> 
    <httpCookies httpOnlyCookies="true"/> 
    <authentication mode="Forms"> 
     <forms loginUrl="Auth" timeout="30" slidingExpiration="true" defaultUrl="Home/Index"/> 
    </authentication> 
    </system.web> 
    <location path="Views/Auth/EnterAuthenticationLink.cshtml"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 
    <location path="Views/Auth"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

И Mothod Я пытаюсь получить доступ в

[HttpPost] 
public ActionResult AuthorizeOneTimeLink(string authenticationUrl) 
{ 
// Authorise link 
} 

Если изменить «AuthorizeOneTimeLink» имя действия для индекса (так что есть 2 Индексные действия на контроллере), измените FormMethod в FormMethod.Get (и измените атрибут в моем новом действии индекса на [HttpGet]), тогда это будет работать, но не пройдет тестирование на проникновение.

+0

Вы не авторизованы. Ваше разрешение основано на действии контроллера. попробуйте использовать атрибут 'allowanonymous' вместо –

+0

Я пробовал это. Проблема была не в разрешении (действие было в AuthController, который уже разрешен). Проблема была в том, что это был HttpGet, поскольку это был OneTimeLink. Виноват. Спасибо за помощь. –

ответ

0

Теперь я понимаю проблему. Он должен быть HttpGet (и пройдет тестирование), так как это одноразовая ссылка, отправленная пользователю. Пользователь должен нажать на параметры передачи ссылки на приложение. Это нужно сделать, используя HttpGet, а не HttpPost.

Смежные вопросы