JSF 中的确认链接电子邮件

Posted

技术标签:

【中文标题】JSF 中的确认链接电子邮件【英文标题】:Confirmation link Email in JSF 【发布时间】:2011-03-18 17:42:37 【问题描述】:

您如何创建一个链接,您可以通过电子邮件发送给用户以确认他们的电子邮件地址在 JSF 中被点击?即,一旦他们点击链接,他们的帐户就会被激活。

【问题讨论】:

【参考方案1】:

您可以通过创建一个页面(例如.jsp)来实现它:

<f:view beforePhaseListener="#userActivationController.performActivation">

(这是用于facelets;对于jsp,属性只是beforePhase)。然后,在托管 bean 的方法中使用FacesContext.getCurrentContext().getExternalContext().getParameterMap() 获取请求参数并获取激活码,传递如下:

http://yoursite.com/activate.jsp?code=54gfd54tgdgfd

【讨论】:

【参考方案2】:

假设您已经使用 JSF 2.0,您可以获取 @ManagedProperty@PostConstruct

@ManagedBean
@RequestScoped
public class Activation 

    @ManagedProperty(value="#param.key")
    private String key;
    private boolean valid;

    @PostConstruct
    public void init() 
        valid = check(key); // And auto-login if valid?
    

    // ...

然后在http://example.com/activate.jsf?key=somelonggeneratedkey访问的JSF中

<h:panelGroup layout="block" rendered="#activation.valid">
   <p>Your account is successfully activated!</p>
   <p><h:link outcome="home">Go to home page</h:link></p>
</h:panelGroup>
<h:panelGroup layout="block" rendered="#!activation.valid">
   <p>Activation failed! Please enter your email address to try once again.</p> 
   <h:form>
       ...
   </h:form>
</h:panelGroup>

【讨论】:

这正是我所需要的。谢谢+1 快速提问。代码必须长且唯一。 java有没有办法像BalusC那样生成一个长的唯一序列?我不认为 Java 随机数生成器保证唯一性 @Harry:使用java.util.UUIDString uuid = UUID.randomUUID().toString(); @BalusC,我知道我这个问题已经快 4 年了,但请解释一下#param.key 在这种情况下的含义? (必须是param吗?) @Buhake: balusc.blogspot.nl/2011/09/…

以上是关于JSF 中的确认链接电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

发送确认链接并单击原始电子邮件后,用新电子邮件更新用户的个人资料

从 cakePHP 中的控制器输出超链接

如何以编程方式确认Gmail自动转发验证?

Rails - 电子邮件确认链接给出“未知操作”错误

SwiftUI、Firebase 链接以确认电子邮件

如何从 ASP.NET Core 3.1 中的存储库类创建确认电子邮件回调