2010-07-20 36 views
9

Làm cách nào để bạn tạo liên kết mà bạn có thể gửi email cho người dùng để xác nhận địa chỉ email của họ được nhấp trong JSF? tức là khi họ nhấp vào liên kết, tài khoản của họ sẽ được kích hoạt.Email liên kết xác nhận trong JSF

Trả lời

17

Giả sử bạn đã có trên JSF 2.0, bạn có thể lấy @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? 
    } 

    // ... 
} 

và sau đó trong JSF được truy cập bởi http://example.com/activate.jsf?key=somelonggeneratedkey

<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> 
+0

Đây chỉ là những gì tôi cần. Cảm ơn bạn +1 –

+0

Câu hỏi nhanh. Mã cần phải dài và độc đáo. Liệu java có một cách để tạo ra một chuỗi dài độc đáo như vậy mà BalusC? Tôi không nghĩ rằng trình tạo số ngẫu nhiên Java đảm bảo tính duy nhất –

+3

@Harry: Sử dụng ['java.util.UUID'] (http://download.oracle.com/javase/6/docs/api/java/util/UUID.html) : 'Chuỗi uuid = UUID.randomUUID(). ToString();'. – BalusC

6

Bạn có thể thực hiện nó bằng cách tạo ra một trang (.jsp cho ex) có:

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

(này là dành cho Facelets; cho jsp thuộc tính chỉ là beforePhase). Và sau đó, trong phương pháp này đậu được quản lý sử dụng FacesContext.getCurrentContext().getExternalContext().getParameterMap() để có được những patameters yêu cầu và nhận được mã kích hoạt, định được thông qua như:

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

Các vấn đề liên quan