2012-03-10 34 views
5

Tôi chỉ đang làm việc trên thành phần quản lý người dùng của dự án mới của chúng tôi. Kế hoạch này là:Đăng nhập tự động CakePHP 2.0 sau khi kích hoạt tài khoản

  1. tài khoản đăng ký trên trang web với số tiền tối thiểu của dữ liệu tài khoản (username, pass, email)
  2. tài khoản nhận được một email với một liên kết kích hoạt để kích hoạt tài khoản
  3. dùng nhấp vào liên kết và kích hoạt tài khoản của mình
  4. hệ thống các bản ghi trong sử dụng sau khi tự động sau khi kích hoạt và chuyển hướng ông loại một bảng điều khiển với thông tin tài khoản (đăng nhập cuối cùng, hi "username", vv)

Nhưng có một số vấn đề với đăng nhập tự động. đây là một phần của mã tôi sử dụng:

<?php 
... 
// set userstatus to "active" and delete meta information "activation_key" 
// then automatically login 
$this->User->id = $id; 
$this->User->saveField('modified', date('Y-m-d H:i:s')); 
$this->User->saveField('status', 1); 

// $this->User->deleteActivationKey .... 

$this->Auth->login($this->User->read()); 
$this->Session->setFlash(__('Successfully activated account. You are now logged in.')); 

$this->User->saveField('last_login', date('Y-m-d H:i:s')); 

$this->redirect(array('controller' => 'pages')); 
... 

này hoạt động cho đến nay, cho đến khi bạn muốn nhận được thông tin về người dùng đăng nhập với người sử dụng() chức năng của phần Auth.

Chúng tôi đang sử dụng này trong AppController-> beforeRender, để có thông tin người dùng ứng dụng rộng rãi:

$this->set('auth', $this->Auth->user()); 

nhưng sau đó hành động tự động đăng nhập, tôi nhận được thông báo chỉ số không xác định. (ví dụ: bằng cách truy cập $ auth ['id'] trong chế độ xem). print_r() chỉ hiển thị tên người dùng và mật khẩu băm của người dùng hiện tại. Nếu bạn đăng nhập theo cách thủ công, mọi thứ đều hoạt động tốt. nó phải là một cái gì đó với đăng nhập tự động sau khi kích hoạt tài khoản.

Dường như có vấn đề với phiên? Tôi đang làm gì sai?

Trả lời

11

Tìm thấy giải pháp sau khi thử nghiệm nhiều biến thể.

tại Làm việc với:

$user = $this->User->findById($id); 
$user = $user['User']; 
$this->Auth->login($user); 

Không biết tại sao, tôi nghĩ tôi đã cố gắng theo cách này đã và điều đó không làm việc.

+2

Bạn chỉ có thể sử dụng: $ this-> Auth-> login ($ user ['User']); –

1

Bạn đã thử cái này chưa? (CakePHP 2.x)

public function signup() { 
    if (!empty($this->request->data)) { 
    // Registration stuff 

    // Auto login 
    if ($this->Auth->login()) { 
     $this->redirect('/'); 
    } 
    } 
} 

Thật đơn giản!

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