D-Add Blockstack Auth to a websi
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 !。
![](https://img.haomeiwen.com/i3420049/6329395b8925f4b2.png)
5.继续,在命令行上输入CTRL-C来停止服务器。
添加一个主页
在本节中,您将为新网站添加一个主页。为此,您创建一个名为PagesController的新控制器,其中包括主页。要设置和测试这个,请执行以下操作:
1.使用rails生成主页。
$ rails generate controller pages home
这个命令指示rails创建一个控制器名称页面,其中包括方法home。运行后,你会有一些新的文件:
- /app/controllers/pages/pages_controller.rb。这是你用home方法创建的新控制器
- /app/views/pages/home.html.erb --- 这是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服务器并打开新主页,您应该会看到您的新主页。
![](https://img.haomeiwen.com/i3420049/c592709d9dcdf65b.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
您应该看到以下内容:
![](https://img.haomeiwen.com/i3420049/af955af16d3ca86a.png)
2.单击带有Blockstack链接的Log In。
![](https://img.haomeiwen.com/i3420049/1bfee3f73482b6e8.png)
该连接将您带到blockstack
![](https://img.haomeiwen.com/i3420049/46e04852c7d5efd0.png)
3.使用Blockstack web应用程序登录。
有关使用blockstack标识创建或登录的信息,请参见使用blockstack标识。当你用你的身份完成登录后,你会被重定向回你的主页:
![](https://img.haomeiwen.com/i3420049/ce96fb5a1be06208.png)
此时,blockstack信息存储在会话中
如果希望进一步开发应用程序,可以使用标准的注销来完成会话。您要注销的代码将调用session[:blockstack_user] = nil来销毁blockstack信息。
结论
恭喜你!您已经成功地将blockstack身份验证集成到网站中。现在,您可以构建一个功能齐全的rails应用程序,它能够使用Blockstack来进行去中心化的用户身份验证。