blockstackblockstack-Trans

D-Add Blockstack Auth to a websi

2019-07-23  本文已影响8人  空乱木

FROM : https://docs.blockstack.org/develop/auth_provider.html

本教程将带领您向web应用程序添加Blockstack身份验证。您构建的站点是一个简单的Rails站点。您不需要任何专门的Ruby或Rails知识来构建这个站点。但是,如果您是一个知识渊博的Rails程序员,您应该能够轻松地完成或扩展本教程。

设置环境
创建Rails网站
添加一个主页
安装OmniAuth和OmniAuth-blockstack gem
为blockstack添加一个OmniAuth回调
测试blockstack身份验证

设置环境

本教程要求Ruby 2.0或更高版本。要确认安装了Ruby并确认版本,请输入以下内容:

$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin16]

如果没有安装Ruby,应该安装它。如果希望在工作站上运行多个不同版本的Ruby,可以使用rvm。

成功安装Ruby之后,安装rails gem。本教程使用rails版本5.2.1编写。您可以使用gem list命令查看gem是否已经安装。要安装rails gem,请执行以下操作:

$ gem install rails

创建Rails网站

1.使用Rails new命令创建一个新的Rails项目:

$ rails new blockstack-rails-example

该命令生成一个项目目录。
2.切换目录到blockstack-rails-example项目目录。

$ cd blockstack-rails-example

3.使用rails服务器启动项目。

$ rails s
s标志是服务器的别名。

4.在浏览器中加载http://localhost:3000地址。
你会看到默认主页上写着耶!你在Rails !。

image.png

5.继续,在命令行上输入CTRL-C来停止服务器。

添加一个主页

在本节中,您将为新网站添加一个主页。为此,您创建一个名为PagesController的新控制器,其中包括主页。要设置和测试这个,请执行以下操作:
1.使用rails生成主页。

$ rails generate controller pages home

这个命令指示rails创建一个控制器名称页面,其中包括方法home。运行后,你会有一些新的文件:

该命令还修改了预先存在的文件/config/routes.rb和配置您的服务器,使其使用home方法路由/pages/home。

2.编辑/config/routes.rb文件以匹配以下内容:

Rails.application.routes.draw do

root to: 'pages#home'

For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

end
这段代码使用to选项调用根方法,该选项指示rails使用pages控制器中的home方法作为主页。

3.保存并关闭/config/routes.rb文件。
启动rails服务器并打开新主页,您应该会看到您的新主页。

image.png

您可以在/app/views/pages/home.html.erb中找到主页的源代码文件。

安装OmniAuth和OmniAuth-blockstack gem

您将使用OmniAuth插件来设置blockstack身份验证。OmniAuth是一个流行的框架,用于将第三方身份验证与ruby on rails网站集成在一起。Blockstack提供了一个OmniAuth插件,OmniAuth- Blockstack,让您更容易做到这一点。

1.如果Rails服务器正在运行,请停止它。
2.在项目的根目录中编辑Gemfile,并添加两个gem,一个用于OmniAuth,另一个用于Blockstack插件。

gem 'omniauth'
gem 'omniauth-blockstack'

3.保存并关闭Gemfile。
4.通过运行bundle Install命令安装gem。

$ bundle install

为blockstack添加一个OmniAuth回调

1.在config/ initialalizer /omniauth.rb上创建一个新文件。

$ touch config/initializers/omniauth.rb

您将使用这个文件来配置OmniAuth gem和Blockstack插件。

2.编辑新的config/initializers/omniauth.rb文件,并添加以下代码:

Rails.application.config.middleware.use OmniAuth::Builder do
provider :blockstack
end

这将把OmniAuth中间件添加到您的项目中,并告诉OmniAuth使用blockstack提供程序。在用户使用OmniAuth登录之后,您需要为Blockstack指定一个回调方法来处理登录流的其余部分。

回调方法通常是从第三方获取身份验证信息,保存一些数据,并通过将信息保存在cookie中将用户登录到应用程序。

3.保存并关闭config/initializers/omniauth.rb文件。
4.编辑/app/controllers/pages_controller.rb文件
这个文件定义了一个PagesController类,您将在其中添加blockstack_callback方法。完成后,文件应该如下所示:

class PagesController < ApplicationController
def home
end

def blockstack_callback
puts 'in the callback'
blockstack_info = request.env['omniauth.auth']
session[:blockstack_user] = blockstack_info
redirect_to '/'
end
end

put行只是到控制台的调试输出。从env['omniauth]获取用户的blockstack信息。,这是OmniAuth存储所有身份验证信息的地方。然后,将该信息加载到密钥blockstack_user下的会话对象中。通过将此信息添加到会话中,可以将该信息保存到cookie中,以便稍后引用。

5.编辑/app/views/pages/home.html.erb文件,并指导用户使用Blockstack登录。
修改HTML如下:

<h1>Pages#home</h1>
<p>Find me in app/views/pages/home.html.erb</p>
<p><a href="/auth/blockstack">Log In with Blockstack</a></p>
<code><%= debug session[:blockstack_user] %></code>

主页引导用户使用Blockstack登录。<%= debug session[:blockstack_user] %>标记告诉rails以易于阅读的格式输出变量session[:blockstack_user]。

此页面创建到路由/auth/blockstack的链接。默认情况下,OmniAuth以/auth/:provider的形式向应用程序添加路由。当用户访问该页面时,将通过第三方身份验证流重定向该页面。

6.保存并关闭/app/views/pages/home.html.erb文件。
7.编辑config/routes.rb。并配置一个路由来处理blockstack回调。

Rails.application.routes.draw do
root to: 'pages#home'
get '/auth/blockstack/callback' => 'pages#blockstack_callback'

For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html

end

get行告诉服务器,当用户访问/auth/blockstack/callback时,调用blockstack_callback方法。默认情况下,当用户从第三方登录返回时,OmniAuth会将用户重定向到/auth/:provider/callback。

8.保存并关闭config/routes.rb文件。

测试blockstack身份验证

1.启动rails服务器。

$ rails s
您应该看到以下内容:

image.png

2.单击带有Blockstack链接的Log In。


image.png

该连接将您带到blockstack


image.png

3.使用Blockstack web应用程序登录。
有关使用blockstack标识创建或登录的信息,请参见使用blockstack标识。当你用你的身份完成登录后,你会被重定向回你的主页:


image.png

此时,blockstack信息存储在会话中
如果希望进一步开发应用程序,可以使用标准的注销来完成会话。您要注销的代码将调用session[:blockstack_user] = nil来销毁blockstack信息。

结论

恭喜你!您已经成功地将blockstack身份验证集成到网站中。现在,您可以构建一个功能齐全的rails应用程序,它能够使用Blockstack来进行去中心化的用户身份验证。

上一篇 下一篇

猜你喜欢

热点阅读