android studio 用户退出登录_Hello Iris简易微博类App开发教程4-退出登录和修改用户资料...

本教程介绍了在Android Studio中开发Hello Iris微博类App时,如何实现用户退出登录及更新用户资料的功能。退出登录通过控制器直接操作,不涉及数据库交互;用户资料更新允许更改密码、用户名和个性签名,使用Gorm库的Updates()方法进行更新,并对更新操作进行了权限验证。
摘要由CSDN通过智能技术生成

b51931adf6fd1eeb109daeac9cac7f76.png

退出登录

我们上一节实现了用户登录。在这一节中,我们首先实现用户退出登录的功能。

因为退出登录的代码不需要做任何与数据库的交互,所以我们会直接将这些代码写在控制器中,而不是写在模型中。

首先,我们还是来编写测试代码。向users_controller_test.go中添加一个TestLogout()函数。

代码清单4-1

users_controller_test.go

.
.
.
func TestUserLogout(t *testing.T) {
    
 app := iris.New()
 ctx := context.NewContext(app)
 setCtxResponse(ctx)
 setCtxRequest(ctx, nil, 0)
 controller := UsersController{}
 setSession(ctx, &controller)
 
 // 测试用户未登录时调用UersController#Logout()
 err := controller.Logout()
 if err.Error() != "not logged in" {
    
    t.Errorf("expected get "not logged in" but got "%s"n", err.Error())
  }
 
 // 测试用户登录后调用UersController#Logout()
  controller.Session.Set("userID", 1)
 err = controller.Logout()
 userID, _ := controller.Session.GetInt("userID")
 if userID >= 0 {
    
    t.Errorf("expected user id in session to be -1 but got %dn", userID)
  }
 if err != nil {
    
    t.Error("got an error:", err)
  }
}

这份测试代码中,为了对已有的代码进行精简,我们将上一节中的一部分代码替换为了下面三个函数:

代码清单4-2

users_controller_test.go

func setCtxRequest(ctx iris.Context, body io.ReadCloser, contentLength int64) {
    
 newRequest, _ := http.NewRequest("FAKEMETHOD", "/fake_path", nil)
 newRequest.Body = body
 newRequest.ContentLength = contentLength
  ctx.ResetRequest(newRequest)
}
 
func setCtxResponse(ctx iris.Context) {
    
 w := context.AcquireResponseWriter()
 hw := httptest.NewRecorder()
  w.BeginResponse(hw)
  ctx.ResetResponseWriter(w)
}
 
func setSession(ctx iris.Context, controller *UsersController) {
    
 cookie := http.Cookie{
    Name: "sample_cookie_uuid", Value: ""}
  ctx.SetCookie(&cookie)
 sess := sessions.New(sessions.Config{
    Cookie: "weibo_app_cookie", Expires: 120000000000})
 controller.Session = sess.Start(ctx)
}

接下来,我们可以来正式编写代码了。

代码清单4-3

controllers/users_controller.go

.
.
.
func (c *UsersController) BeforeActivation(b mvc.BeforeActivation) {
    
 middleware := func(ctx iris.Context) {
    
    ctx.Application().Logger()
    ctx.Next()
  }
 
  b.Handle("POST", "/users/new", "Create", middleware)
  b.Handle("GET", "/users/{id:int}", "Show", middleware)
  b.Handle("POST", "/login", "Login", middleware)
  b.Handle("DELETE", "/logout", "Logout", middleware)
}
.
.
.
func (c *UsersController) Logout() (err error) {
    
 if !IsLoggedIn(c.Session) {
    
 err = errors.New("not logged in")
 return
  }
 if !c.Session.Delete("userID") {
    
 err = errors.New("logout failed. please try again later")
  }
 return
}

退出登录的代码很简单,我们首先检查了用户是否确实已经登录,在保证用户确实已经登录的情况下,我们才从session中删去userID的值。否则我们会返回一个错误提示用户尚未登录。

在这里,我们用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值