2013-08-21 41 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()); 
} 

我希望這能回答你的問題。