2016-07-29 24 views
0

Ich möchte Servicestack-Dienste nur für autorisierte Benutzer erreichbar machen. dies ist mein Register Methode var authResponse = client.Post(new Authenticate { provider = CredentialsAuthProvider.Name, //= credentials UserName = model.Username, Password = model.Password, RememberMe = true, }); client.UserName = model.Username; client.Password = model.Password;Nicht autorisierte Ausnahme, ServiceStack

Diese Log

[HttpPost] 
    [ActionName("LogIn")] 
    public ActionResult Login(LogInModel model) 
    { 
     var authResponse = client.Post(new Authenticate 
     { 
      provider = CredentialsAuthProvider.Name, //= credentials 
      UserName = model.Username, 
      Password = model.Password, 
      RememberMe = true, 
     }); 
     client.UserName = model.Username; 
     client.Password = model.Password; 

     return RedirectToAction("RefundPayment"); 
    } 

Apphost in Methode ist:

public override void Configure(Container container) 
    { 
     SetConfig(new HostConfig 
     { 
      HandlerFactoryPath = "api", 
     }); 
     //Config examples 
     //this.Plugins.Add(new PostmanFeature()); 
     //this.Plugins.Add(new CorsFeature()); 

     //Set MVC to use the same Funq IOC as ServiceStack 
     ControllerBuilder.Current.SetControllerFactory(new FunqControllerFactory(container)); 

     Plugins.Add(new AuthFeature(() => new AuthUserSession(), 
      new IAuthProvider[] { 
      new BasicAuthProvider(), //Sign-in with HTTP Basic Auth 
      new CredentialsAuthProvider(), //HTML Form post of UserName/Password credentials 
      })); 

     Plugins.Add(new RegistrationFeature()); 

     container.Register<ICacheClient>(new MemoryCacheClient()); 
     var userRep = new InMemoryAuthRepository() ; 
     container.Register<IUserAuthRepository>(userRep); 
    } 

Warum diese Ausnahme tritt trotz ich Benutzer Authentifizieren in Anmelden Methode? Muss ich Code in AppHost ändern? Vielen Dank.

Antwort

1

einen Blick auf die ServiceStack MVC documentation für ein Beispiel haben, wie ServiceStack Authentifizierung von MVC zu verwenden, zB anstelle eines ServiceClient verwenden Sie ServiceStack das könnte Aufruf AuthenticateService direkt:

using (var authService = ResolveService<AuthenticateService>()) 
{ 
    var response = authService.Authenticate(new Authenticate { 
     provider = CredentialsAuthProvider.Name, 
     UserName = userName, 
     Password = password, 
     RememberMe = true, 
    }); 

    // add ASP.NET auth cookie 
    FormsAuthentication.SetAuthCookie(userName, true); 

    return Redirect(string.IsNullOrEmpty(redirect) ? "/" : redirect); 
} 

Dann können Sie die Verwendung ServiceStack Authentication Attributes zu Beschränken Sie den Zugriff auf Ihren Dienst für authentifizierte Clients.

+0

Danke für Hilfe. Wenn ich zu einer anderen Aktion weiterleite, wird immer noch eine nicht autorisierte Ausnahme ausgelöst. Muss ich mich in jedem Controller authentifizieren? –

+0

@MartynasBrazionis sollten Sie nur einmal authentifizieren müssen, dann können Sie Controller aufrufen, die mit dem '[Authenticate]' - Attribut von ServiceStack geschützt sind, wie in der http://mvc.servicestack.net Demo zu sehen. Beachten Sie, dass Ihre Controller "ServiceStackController" erben sollten. – mythz