What is the recommend solution to use for integrating Google and Facebook authentication in application?
I found two existing solutions - vertx-auth and vertx-pac4j - the latter is however not part of 3.3.3 yet. Is it expected to be integrated in upcoming releases?
I tried the former solution based on documentation found here
http://vertx.io/docs/vertx-auth-oauth2/java/ and ran into a few problems, specifically the following exception. Look like the "state" parameter is not being handled.
java.lang.NullPointerException: value
at io.netty.util.internal.ObjectUtil.checkNotNull(ObjectUtil.java:31) ~[server.jar:na]
at io.netty.handler.codec.DefaultHeaders.setObject(DefaultHeaders.java:478) ~[server.jar:na]
at io.netty.handler.codec.http.DefaultHttpHeaders.set(DefaultHttpHeaders.java:164) ~[server.jar:na]
at io.vertx.core.http.impl.HeadersAdaptor.set(HeadersAdaptor.java:97) ~[server.jar:na]
at io.vertx.core.http.impl.HttpServerResponseImpl.putHeader(HttpServerResponseImpl.java:157) ~[server.jar:na]
at io.vertx.core.http.impl.HttpServerResponseImpl.putHeader(HttpServerResponseImpl.java:54) ~[server.jar:na]
at io.vertx.ext.web.handler.impl.OAuth2AuthHandlerImpl.handle(OAuth2AuthHandlerImpl.java:60) ~[server.jar:na]
at io.vertx.ext.web.handler.impl.OAuth2AuthHandlerImpl.handle(OAuth2AuthHandlerImpl.java:32) ~[server.jar:na]
at io.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:215) [server.jar:na]
at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:78) [server.jar:na]
at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:94) [server.jar:na]
at io.vertx.ext.web.handler.impl.UserSessionHandlerImpl.handle(UserSessionHandlerImpl.java:63) [server.jar:na]
at io.vertx.ext.web.handler.impl.UserSessionHandlerImpl.handle(UserSessionHandlerImpl.java:29) [server.jar:na]
at io.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:215) [server.jar:na]
at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:78) [server.jar:na]
at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:94) [server.jar:na]
at io.vertx.ext.web.handler.impl.SessionHandlerImpl.lambda$handle$0(SessionHandlerImpl.java:115) [server.jar:na]
at io.vertx.ext.web.handler.impl.SessionHandlerImpl.lambda$doGetSession$2(SessionHandlerImpl.java:141) [server.jar:na]
at io.vertx.ext.web.sstore.impl.LocalSessionStoreImpl.get(LocalSessionStoreImpl.java:60) ~[server.jar:na]
at io.vertx.ext.web.handler.impl.SessionHandlerImpl.doGetSession(SessionHandlerImpl.java:128) [server.jar:na]
at io.vertx.ext.web.handler.impl.SessionHandlerImpl.getSession(SessionHandlerImpl.java:124) [server.jar:na]
at io.vertx.ext.web.handler.impl.SessionHandlerImpl.handle(SessionHandlerImpl.java:99) [server.jar:na]
at io.vertx.ext.web.handler.impl.SessionHandlerImpl.handle(SessionHandlerImpl.java:33) [server.jar:na]
at io.vertx.ext.web.impl.RouteImpl.handleContext(RouteImpl.java:215) [server.jar:na]
at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:78) [server.jar:na]
at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:94) [server.jar:na]
at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.doEnd(BodyHandlerImpl.java:202) ~[server.jar:na]
at io.vertx.ext.web.handler.impl.BodyHandlerImpl$BHandler.end(BodyHandlerImpl.java:180) ~[server.jar:na]
at io.vertx.ext.web.handler.impl.BodyHandlerImpl.lambda$handle$0(BodyHandlerImpl.java:67) ~[server.jar:na]
at io.vertx.core.http.impl.HttpServerRequestImpl.handleEnd(HttpServerRequestImpl.java:406) ~[server.jar:na]
at io.vertx.core.http.impl.ServerConnection.handleEnd(ServerConnection.java:298) ~[server.jar:na]
at io.vertx.core.http.impl.ServerConnection.processMessage(ServerConnection.java:424) ~[server.jar:na]
at io.vertx.core.http.impl.ServerConnection.handleMessage(ServerConnection.java:139) ~[server.jar:na]
at io.vertx.core.http.impl.HttpServerImpl$ServerHandler.doMessageReceived(HttpServerImpl.java:615) ~[server.jar:na]
at io.vertx.core.http.impl.HttpServerImpl$ServerHandler.doMessageReceived(HttpServerImpl.java:522) ~[server.jar:na]
at io.vertx.core.http.impl.VertxHttpHandler.lambda$channelRead$0(VertxHttpHandler.java:71) ~[server.jar:na]
at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:314) ~[server.jar:na]
at io.vertx.core.impl.ContextImpl.executeFromIO(ContextImpl.java:190) ~[server.jar:na]
at io.vertx.core.http.impl.VertxHttpHandler.channelRead(VertxHttpHandler.java:71) ~[server.jar:na]
at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:122) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) ~[server.jar:na]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:293) ~[server.jar:na]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:267) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) ~[server.jar:na]
at io.netty.handler.logging.LoggingHandler.channelRead(LoggingHandler.java:233) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:350) ~[server.jar:na]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1334) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:372) ~[server.jar:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:358) ~[server.jar:na]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:926) ~[server.jar:na]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:129) ~[server.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:610) ~[server.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:551) ~[server.jar:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:465) ~[server.jar:na]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:437) ~[server.jar:na]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) ~[server.jar:na]
at java.lang.Thread.run(Thread.java:745) ~[na:1.8.0_92]