Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Tích hợp Đăng nhập Twitter trong Rails với OmniAuth-Twitter: Hướng dẫn Chi Tiết

Trong hướng dẫn này, bạn sẽ học cách cho phép người dùng ứng dụng đăng nhập bằng tài khoản Twitter. Việc này trở nên dễ dàng nhờ các công cụ như OAuth.

Bạn sẽ sử dụng OmniAuth-Twitter, chứa chiến lược Twitter cho OmniAuth.

Hãy bắt đầu nào!

Bắt Đầu

Khởi tạo bằng cách tạo ứng dụng Rails. Từ terminal, chạy lệnh:

Mở Gemfile và thêm gem bootstrap.

Cài gem bằng lệnh:

Đổi tên app/assets/stylesheets/application.css thành app/assets/stylesheets/application.scss.

Khi xong, thêm các dòng sau để import bootstrap:

Tạo partial tên _navigation.html.erb chứa code điều hướng; đặt trong thư mục app/views/layouts.

Nhập code dưới vào IDE. Nó dùng Bootstrap để tạo thanh điều hướng cho ứng dụng.

Để navigation được dùng, cần render nó trong application layout. Sửa layout ứng dụng như sau:

Tạo PagesController với action index bằng lệnh:

Trong view index tạo ra, sửa thành:

Ở trên dùng class jumbotron—component Bootstrap cho phép mở rộng viewport để hiển thị thông điệp marketing. Xem thêm tại tài liệu Bootstrap.

Mở file routes để thêm root_path:

Thiết Lập OmniAuth-Twitter

Cần tạo ứng dụng Twitter mới. Vào trang Twitter Developer để tạo. Nhập các chi tiết cần thiết, tương tự như ảnh chụp màn hình dưới.

Tích hợp Đăng nhập Twitter trong Rails với OmniAuth-Twitter: Hướng dẫn Chi TiếtTích hợp Đăng nhập Twitter trong Rails với OmniAuth-Twitter: Hướng dẫn Chi TiếtTích hợp Đăng nhập Twitter trong Rails với OmniAuth-Twitter: Hướng dẫn Chi Tiết

Đối với callback URL, nhập địa chỉ website cộng với "auth/twitter/callback". Nếu chạy local, callback URL là: https://127.0.0.1:3000/auth/twitter/callback.

Bạn sẽ được chuyển đến trang thông tin app trên Twitter. Vào tab Keys and Access Tokens để lấy key. Copy Consumer Key và Consumer Secret lưu nơi an toàn—sẽ dùng ngay.

Callback URL là URL người dùng được chuyển hướng đến sau khi xác thực và cấp quyền thành công (request sẽ chứa dữ liệu user và token). Tất cả chiến lược OmniAuth mong đợi callback URL bằng “/auth/:provider/callback”. :provider lấy tên chiến lược. Ở đây chiến lược là "twitter" như khai báo trong initializer.

Mở Gemfile thêm gem omniauth-twitter:

Tạo initializer cho OmniAuth trong thư mục config/initializers. File này chứa cấu hình OmniAuth. Làm giống như sau:

Lúc này cần dùng key và access token đã lưu. Cần giữ an toàn để không push lên repo công khai khi commit code.

Sẽ dùng gem cho việc này. Mở Gemfile thêm gem dưới. Thêm vào group development, test:

Cài gem:

Trong thư mục gốc ứng dụng, tạo file .env.

Mở và thêm key, token như sau:

Mở .gitignore thêm file vừa tạo:

Vậy là key và token an toàn! Để tìm hiểu thêm về dotenv-rails, xem trang GitHub.

Cập nhật route. Mở file routes thêm route sau:

Thêm link đăng nhập Twitter vào navigation. Mở file navigation sửa thành:

Từ trên, chỉ hiển thị link đăng nhập Twitter khi user chưa đăng nhập.

Tạo Sessions

Cần session controller để xử lý đăng nhập user. Tạo file trong thư mục controllers, nội dung như sau:

Action create giúp tạo session cho user để họ đăng nhập vào ứng dụng. Không có này thì user không có cách nào đăng nhập.

Cần phương thức current_user lúc này. Nó giúp kiểm tra user đã đăng nhập hay chưa.

Mở app/controllers/application_controller.rb thêm:

Model User

Tạo model User. Chạy lệnh:

Sẽ sinh migration file như sau:

Migrate database:

Mở model User sửa thành:

Code trên lưu một số thông tin user: name, profile_image, token, secret. Nếu ứng dụng cần thêm thông tin, xem trang OmniAuth-Twitter.

Xóa Sessions (Đăng Xuất)

Trong ứng dụng, cần cho user đăng xuất. Cần action destroy trong SessionsController và thêm link vào navigation.

Thêm action destroy vào SessionsController:

Thêm link đăng xuất vào navigation, navigation thành:

Mở config/routes.rb cập nhật route với action vừa tạo:

Khởi động rails server và truy cập https://localhost:3000 để xem kết quả.

Kết Luận

Trong hướng dẫn này bạn đã học cách bật OmniAuth-Twitter trong ứng dụng Rails. Bạn thấy cách lấy dữ liệu user bằng OmniAuth-Twitter, thực hiện ở model User. Bạn tạo SessionControllers xử lý đăng nhập/đăng xuất user khỏi ứng dụng.

Hy vọng bạn thích. Tương lai sẽ hướng dẫn làm tương tự cho Facebook, Google, LinkedIn.