如果你想開發(fā)一個應(yīng)用(1-15)

登錄服務(wù)##

想想一個應(yīng)用交胚,第一次打開,一般來說都是登錄頁音念,所以在服務(wù)端先完成一個用于用戶登錄的action,首先創(chuàng)建UserController,然后創(chuàng)建Login的action站刑,代碼如下:

@Controller
public class UserController extends BaseController {
    @Autowired
    UserService userService;
    @ResponseBody
    @RequestMapping(value = "/login",method = {RequestMethod.POST})
    public Object login(@RequestBody Map map) {
       return null;
    }
}

想一下登錄服務(wù)步驟:

  1. 通過用戶名在db中查詢此用戶
  2. 如果查詢到用戶浪册,則比對密碼,否則返回登錄失敗
  3. 如果密碼比對成功愁茁,創(chuàng)建token蚕钦,否則返回登錄失敗
  4. 返回token

所以最終UserService內(nèi)的服務(wù)方法實現(xiàn)如下:

public String login(String username, String password) {
    //判斷用戶名密碼是否符合(此時不加鹽加密)
    User user=userRepository.getUserByName(username);
    if(user!=null&&user.getPassword().equals(password)){
        //創(chuàng)建token
        Token token=TokenUtil.generateToken(UUID.randomUUID().toString(),user.getId());
        return token.getSignature();
    }
    return "";
}

JPA內(nèi)的略

此時的action的內(nèi)容就很簡單了:

@ResponseBody
@RequestMapping(value = "/login",method = {RequestMethod.POST})
public Object login(@RequestBody Map map) {
    String token = userService.login(map.get("username").toString(), map.get("password").toString());
    if (token.equals("")) {
        return result(200, "登錄失敗", "");
    }
    return result(token);
}

接下來用postman來測試一下,我們在db中準(zhǔn)備兩條數(shù)據(jù):

然后打開postman鹅很,輸入?yún)?shù)嘶居,查看一下:

點(diǎn)擊send后,發(fā)現(xiàn)返回了錯誤信息:

這是因為發(fā)送請求參數(shù)的格式錯了促煮,還記得上一章邮屁,為了配合前端的請求方式,服務(wù)端的請求接收方式改為了RequestBody的方式菠齿,所以佑吝,前端必須使用json方式發(fā)送,恰好我們的postman也支持這種方式绳匀,修改為:

這樣點(diǎn)擊發(fā)送就可以了芋忿,這時候的返回是:

{
    "msg": "",
    "code": 200,
    "data": "0c09472d6d3bf978fe2da968f774e002"
}

data節(jié)點(diǎn)就是我們所需要的token

登錄注冊客戶端##

客戶端炸客,客戶端,這里我都不知道該如何寫了戈钢,畢竟我也是一個后端的開發(fā)人員痹仙,而前端貌似必備的技能,如less啥的逆趣,都不會蝶溶,只能寫css和js,所以這里我只能貼出我現(xiàn)有的代碼宣渗,然后針對vue的一些內(nèi)容進(jìn)行一下說明,下面在views文件夾內(nèi)創(chuàng)建Login.vue文件抖所。

Login.vue:

<style scoped >
.login{
    background:#6fc2f3;
    width:100%;
    height: 100%;
}
.logo{
    width:50%;
    margin:0px auto;
}
.logo img{
    width: 100%;
    border-radius: 10px;
    border:3px solid #075d8b;
}
</style>
<template>
    <div class="login">
        <div style="height:23%"></div>
        <div class="logo">
        <img src="../assets/logo.jpg">
        </div>
        <div style="margin-top:10px; text-align:center">
            <mu-content-block>
                <mu-text-field hintText="請輸入郵箱" v-model="username" fullWidth inputClass="text_center"/><br/>
                <mu-text-field hintText="請輸入密碼" v-model="password"  type="password" inputClass="text_center" fullWidth /><br/>
                <mu-raised-button label="登陸" primary fullWidth  v-on:click="login"/>
                <a @click="toRegister" style="color:#fafafa;margin-top:5px;display:block">沒有賬號?去注冊吧</a>
            </mu-content-block>
        </div>
        <mu-dialog :open="dialog">
            請您檢查用戶名或密碼,如果確認(rèn)輸入無誤痕囱,可以去微信公眾號"還沒有申請呢"報告bug<br>
            <mu-flat-button label="確定"  slot="actions" fullWidth  @click="close"/>
        </mu-dialog>
    </div>
</template>
<script>
    export default {
        data () {
            return {
                username: "",
                password: "",
                dialog:false,
            }
        },
        methods:{
            login:function (event) {
                if(event){
                    var data={
                        username:this.username,
                        password:this.password
                    }
                    this.$http.post("/login",data).then(res=>{
                        var result=res.data;
                        if(result.msg==""){
                            this.$store.commit('setToken',result.data);//1
                            this.$router.push({name:"Index"})//2
                        }else{
                            this.dialog=true;//3
                        }
                    },res=>{
                    })
                }
            },
            toRegister:function(event){
                if(event){
                    this.$router.push({name:"Register"})
                }
            },
            close:function(event){
                this.dialog=false;
            }
        }
    }
</script>

在template節(jié)點(diǎn)內(nèi)可以看到田轧,這個頁包含了登錄頁所需的一切功能:

  • 用戶名輸入框
  • 密碼輸入框
  • 提交按鈕
  • 注冊入口
  • 找回密碼入口

<mu-content-block>這種mu打頭的標(biāo)簽為MuseUI庫所提供的標(biāo)簽,其余的為普通html標(biāo)簽鞍恢。

輸入npm run dev后運(yùn)行的效果如下:

5.PNG

需要說明的幾點(diǎn):

  1. 注釋1,表示將返回的token值存儲在vuex狀態(tài)內(nèi)
  2. 登錄成功后傻粘,將當(dāng)前頁面換為index頁,index需在router內(nèi)注冊
  3. 登錄失敗帮掉,彈出提示框弦悉,提示信息

router內(nèi)注冊的代碼:

export default new Router({
    mode: 'history',
    routes: [
        {
            path: '/',
            name: 'Index',
            component: Index
        },
        {
            path: '/login',
            name: 'Login',
            component: Login
        },
        {
            path: '/Register',
            name: 'Register',
            component: Register
        },
        {
            path: '/ForgetPassword',
            name: 'ForgetPassword',
            component: ForgetPassword
        }
    ]
})

其中Indel,Register蟆炊,F(xiàn)orgetPassword的代碼可參考github上的源碼

繼續(xù)為了東半球最好的記錄軟件努力

謝謝觀看

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末稽莉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子涩搓,更是在濱河造成了極大的恐慌污秆,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昧甘,死亡現(xiàn)場離奇詭異良拼,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)充边,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門庸推,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痛黎,你說我怎么就攤上這事予弧。” “怎么了湖饱?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵掖蛤,是天一觀的道長。 經(jīng)常有香客問我井厌,道長蚓庭,這世上最難降的妖魔是什么致讥? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮器赞,結(jié)果婚禮上垢袱,老公的妹妹穿的比我還像新娘。我一直安慰自己港柜,他們只是感情好请契,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夏醉,像睡著了一般爽锥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上畔柔,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天氯夷,我揣著相機(jī)與錄音,去河邊找鬼靶擦。 笑死腮考,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的玄捕。 我是一名探鬼主播踩蔚,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枚粘!你這毒婦竟也來了寂纪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赌结,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后孝冒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柬姚,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年庄涡,在試婚紗的時候發(fā)現(xiàn)自己被綠了量承。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡穴店,死狀恐怖撕捍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泣洞,我是刑警寧澤忧风,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站球凰,受9級特大地震影響狮腿,放射性物質(zhì)發(fā)生泄漏腿宰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一缘厢、第九天 我趴在偏房一處隱蔽的房頂上張望吃度。 院中可真熱鬧,春花似錦贴硫、人聲如沸椿每。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽间护。三九已至,卻和暖如春贪绘,著一層夾襖步出監(jiān)牢的瞬間兑牡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工税灌, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留均函,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓菱涤,卻偏偏與公主長得像苞也,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粘秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355