0

我正在使用带有 SecureSocial 的 Play Framework 2.1。
我有自己的模板、UserService 和 UsernamePasswordProvider/FacebookProvider。

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

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

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

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

我将实现另一个专用于从 RegisterForm 检索凭据的 Provider,并调用

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

有更好的主意吗?

谢谢

4

1 回答 1

0

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

我们在一个带有securesocial的play2 java应用程序中也遇到了这种情况,我们的CustomRegistrationController.handleSignUp方法看起来很糟糕。像这样:

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());
}

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

于 2013-08-21T20:32:32.480 回答