12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- <template lang="pug">
- .password-strength
- v-progress-linear(
- :color='passwordStrengthColor'
- v-model='passwordStrength'
- height='2'
- )
- .caption(v-if='!hideText', :class='passwordStrengthColor + "--text"') {{passwordStrengthText}}
- </template>
- <script>
- import zxcvbn from 'zxcvbn'
- import _ from 'lodash'
- export default {
- props: {
- value: {
- type: String,
- default: ''
- },
- hideText: {
- type: Boolean,
- default: false
- }
- },
- data() {
- return {
- passwordStrength: 0,
- passwordStrengthColor: 'grey',
- passwordStrengthText: ''
- }
- },
- watch: {
- value(newValue) {
- this.checkPasswordStrength(newValue)
- }
- },
- methods: {
- checkPasswordStrength: _.debounce(function (pwd) {
- if (!pwd || pwd.length < 1) {
- this.passwordStrength = 0
- this.passwordStrengthColor = 'grey'
- this.passwordStrengthText = ''
- return
- }
- const strength = zxcvbn(pwd)
- this.passwordStrength = _.round((strength.score + 1) / 5 * 100)
- if (this.passwordStrength <= 20) {
- this.passwordStrengthColor = 'red'
- this.passwordStrengthText = this.$t('common:password.veryWeak')
- } else if (this.passwordStrength <= 40) {
- this.passwordStrengthColor = 'orange'
- this.passwordStrengthText = this.$t('common:password.weak')
- } else if (this.passwordStrength <= 60) {
- this.passwordStrengthColor = 'teal'
- this.passwordStrengthText = this.$t('common:password.average')
- } else if (this.passwordStrength <= 80) {
- this.passwordStrengthColor = 'green'
- this.passwordStrengthText = this.$t('common:password.strong')
- } else {
- this.passwordStrengthColor = 'green'
- this.passwordStrengthText = this.$t('common:password.veryStrong')
- }
- }, 100)
- }
- }
- </script>
- <style lang="scss">
- .password-strength > .caption {
- width: 100%;
- left: 0;
- margin: 0;
- position: absolute;
- top: calc(100% + 5px);
- }
- </style>
|