2013-08-21 158 views
0

我正在使用Play Framework 2.1与SecureSocial。
我有我自己的模板,UserService和UsernamePasswordProvider/FacebookProvider。注册后的SecureSocial登录

我不使用SecureSocial来注册我的用户,但我用它来登录和处理会话。 如何让人们在注册后登录,因此在我的Java代码中?

我试图用Authenticator.create(...)

securesocial.core.Authenticator.create(Scala.orNull(securesocial.core.UserService.find(new securesocial.core.UserId(newUser.getId(),"wimhauserpass")))); 

,但我不能用UserService.find(),它告诉我,它必须是静态的......

我要实现专门来检索RegisterForm凭证另一个供应商,并调用

securesocial.controllers.ProviderController.authenticate("userpassregister"); 

任何更好的主意吗?

感谢

回答

0

如果我理解你正确,您有一个自定义的注册控制器,成功注册后,用户必须先登录。

我们也有过这种情况与securesocial一个play2 Java应用程序,而我们的CustomRegistrationController.handleSignUp方法看起来像s.th.像这样:

public Result handleSignUp(final String token) { 
    // verify token, validate form, fill user from form etc. 
    ... 

    // save user in userService, delete token 
    userService.doSave(user); 
    userService.doDeleteToken(token); 

    // login user 
    final Either<Error, Authenticator> result = Authenticator.create(user); 
    if (result.isLeft()) { 
     // add some msg to flash, redirect to login 
     ... 
     return redirect(RoutesHelper.login()); 
    } 

    // Add the auth cookie to response 
    final play.api.mvc.Cookie authCookie = result.right().get().toCookie(); 
    response().setCookie(authCookie.name(), authCookie.value(), 
     (Integer)Scala.orNull(authCookie.maxAge()), authCookie.path(), 
     Scala.orNull(authCookie.domain()), authCookie.secure(), authCookie.httpOnly()); 

    // Add some success message 
    ... 
    return redirect(routes.UserSignUpController.signUpConfirmation()); 
} 

我希望这能回答你的问题。