3

I am trying to create an owin web app using token authentication, my startup does not have any special setup like the example in

https://github.com/NancyFx/Nancy/wiki/Token-Authentication

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
    {
        TokenAuthentication.Enable(pipelines, new TokenAuthenticationConfiguration(container.Resolve<ITokenizer>()));
    }
}

mine is simply

public void Configuration(IAppBuilder app)
{
    app.UseNancy();
}

I have the module defined like

public HomeModule(ITokenizer tokenizer)
{

    Post["/login"] = _ =>
    {
        DefaultUserIdentityResolver resolver = new DefaultUserIdentityResolver();
        //var userName = (string)this.Request.Form.Username;
        //var password = (string)this.Request.Form.Password;

        var claims = new List<string> { "admin", "poweruser" };

        var userIdentity = resolver.GetUser("ross", claims, Context);
        if (userIdentity == null)
        {
            return HttpStatusCode.Unauthorized;
        }

        var token = tokenizer.Tokenize(userIdentity, Context);

        return new
        {
            Token = token,
        };
    };
}

Not much just yet I know but when when I get to tokenize I get an exception of the type Nancy.ErrorHandling.RouteExecutionEarlyExitException which really doesnt have anything in the message or stack trace to indicate the issue.

I am currently hosting over http in casini on .NET 4.5.1

Any pointers would be appreciated

Update:

Message is:

Exception of type 'Nancy.ErrorHandling.RouteExecutionEarlyExitException' was thrown.

Stack trace is:
   at Nancy.Authentication.Token.Tokenizer.Tokenize(IUserIdentity userIdentity, NancyContext context)
   at Samaritan.Hosting.HttpServices.HomeModule.<>c__DisplayClass11.<.ctor>b__7(Object _) in c:\src\DukeSoftware\Samaritan\Main\Samaritan.Hosting.HttpServices\HomeModule.cs:line 39
   at CallSite.Target(Closure , CallSite , Func`2 , Object )
   at System.Dynamic.UpdateDelegates.UpdateAndExecute2[T0,T1,TRet](CallSite site, T0 arg0, T1 arg1)
   at Nancy.Routing.Route.<>c__DisplayClass4.<Wrap>b__3(Object parameters, CancellationToken context)

I tried setting up the startup.cs like this

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseNancy();
    }
}

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
    {
        TokenAuthentication.Enable(pipelines, new TokenAuthenticationConfiguration(container.Resolve<ITokenizer>()));
    }
}

but I got the following exception

{"Located multiple bootstrappers:\r\n - Samaritan.Hosting.HttpServices.BootStarapper\r\n - Samaritan.Hosting.HttpServices.Bootstrapper\r\n\r\nEither remove unused bootstrapper types or specify which type to use."}

So I removed the bootsrapper and just left Startup. An instantiated tokenizer seems to be passed into the module when you declare the constructor public HomeModule(ITokenizer tokenizer) So I didnt think the creation of the tokenizer was a problem

Stachu
  • 5,677
  • 3
  • 30
  • 34
rosco
  • 87
  • 4

1 Answers1

1

did you find fix?

I'm encountering the same exception. It's because I have 2 EXE files in the same directory having child of 'DefaultNancyBootstrapper' class.

I gotta use old Nancy v1.0. so it seems there's no other way but to use 'DefaultNancyBootstrapper' in only one place.

Locke
  • 315
  • 1
  • 3
  • 14